přejít na obsah přejít na navigaci

Linux E X P R E S, Python 3 (7): funkcie (2. časť)

Kingston - velká jarní soutěž

Python 3 (7): funkcie (2. časť)

python.png

V siedmej časti seriálu o Python 3 pokračujeme v predchádzajúcej časti o funkciách. Podrobnejšie si vysvetlíme fungovanie return, ukážeme si ako zapísať funkciu tak, aby prijímala ľubovolný počet parametrov, pozrieme sa aj na rozdiel medzi lokálnou a globálnou premennou a dostaneme sa takisto k „docstringu“ funkcie.


minulej časti vieme ako vyzerá funkcia v Pythone:

def function(parameter1, parameter2):
    # do something
    return something

return

Vrátenie väčšieho počtu hodnôt

V minulej časti sme si ukázali, že funkcia pomocou return dokáže vrátiť ľubovoľnú hodnotu, z ktorou následne môžeme pracovať a napríklad ju uložiť do nejakej premennej. Čo však ak od funkcie chceme, aby vracala viac ako jednu hodnotu?

Je to jednoduché. Keďže funkcia môže vracať akúkoľvek hodnotu, čiže akýkoľvek dátový typ, stačí nám, aby vrátila najlepšie n-ticu (tuple), prípadne objekt iného iterovateľného dátového typu (set, list). Takýto výstup totiž vieme aj v jednom riadku uložiť do zadaných premenných. Komentovaný príklad z interpretera:

>>> def function():
...  return ("Prvá hodnot", 2) # zátvorky sú nepotrebé
... 
>>> a, b = function() # › a, b = "Prvá hodnot", 2
>>> print(a)
Prvá hodnot
>>> print(b)
2

Ukončenie funkcie

Vrátenie hodnoty je pre funkciu dá sa povedať prioritná a zároveň posledná úloha. Po tom, ako funkcia vráti hodnotu už jej beh nemá zmysel. To znamená, že pokiaľ return použijeme vo funkcii skôr, ako je zdanlivý koniec funkcie, príkazy vo funkcii sa vykonajú len po tú časť, kde funkcia vráti hodnotu a funkcia je tým ukončená.

>>> def f():
...  print("Ahoj")
...  a = input("?> ")
...  if not a: # pripomenutie: bool("") == False
...   return "Bez odpovede"
...  print("Ako sa máš?")
...  a = input("?> ")
...  return a
... 
>>> r = f()
Ahoj
?> Ahoj
Ako sa máš?
?> Fajn
>>> print(r)
Fajn
>>> r = f()
Ahoj
?> 
>>> print(r)
'Bez odpovede'

Funkcia s ľubovoľným počtom parametrov

V minulej časti sme si písali len o funkciách s daným počtom či už povinných alebo voliteľných parametrov. Niekedy však môžeme potrebovať funkciu, ktorej budeme predávať počet argumentov podľa potreby. Takáto funkcia vyzerá takto:

def function(*args):
    pass

Vrámci funkcie je teraz dostupná premenná args dátového typu tuple, v ktorej sa nachádzajú všetky argumenty predané funkcii. S premennou následne vieme pracovať tak ako s hocijakou inou n-ticou.

>>> def print_all(*strings):
...  for x in strings:
...   print(x)
... 
>>> print_all("a", "b", "abc d")
a
b
abc d
>>> print_all("a")
a
>>> print_all()
>>>

Lokálna vs. globálna premenná

Premenné, ktoré vytvoríme vrámci funkcie sú len pre danú funkciu a mimo nej už nie. Takéto premenné nazývame lokálne. Globálna premenná je taká, ku ktorej vieme pristupovať zo všetkých miest programu.

>>> def func():
...  var = 0
...  print(var)
...  local = 4
... 
>>> var = 5
>>> func()
0
>>> print(var)
5
>>> print(local)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'local' is not defined

Vidíme, že premenná var definovaná mimo funkcie sa nezhoduje s tou, ktorú sme použili vo funkcii, aj keď majú rovnaký názov. Takisto premenná local, ktorú sme zapísali vo vnútri funkcie nieje mimo funkcie dostupná a po ukončení funkcie zaniká.



Existuje však možnosť vytvorenia globálnej premennej, ktorá je dostupná po celý čas v celom programe. Pre vytvorenie takejto premennej je potrebné použiť kľúčové slovíčko global. Používanie globálnych premenných sa však vo všeobecnosti neodporúča.

>>> def function():
...  global a
...  a = a+1
...  print (a)
... 
>>> a = 0
>>> function()
1
>>> function()
2
>>> print(a)
2

Docstring

Pokiaľ chceme opísať fungovanie funkcie, môžeme tak spraviť pomocou pridania takzvaného docstringu na začiatok funkcie. Docstring je niečo ako komentár s ľubovoľným počtom riadkov ktorý je uzavretý v strojených úvodzovkách. Docstring je potom uložený v premennej __doc__, ktorá patrí danej funkcii (objektu).

>>> def function():
...  """Funkcia, ktorá robí nič"""
...  pass
... 
>>> function()
>>> print(function.__doc__)
Funkcia, ktorá robí nič
>>> import math
>>> print(math.sqrt.__doc__)
sqrt(x)

Return the square root of x.

Záver

Tak, čo sa funkcií týka, by to mohlo byť zhruba všetko. Náš second.py si môžete skúsiť o tieto drobnosti vylepšiť aj sami, podľa toho, ako uznáte za vhodné.

V ďalšej časti sa pozrieme na čítanie a zápis do súboru. Ak máte nejaké predstavy, ktorým smerom by sa mal tento seriál uberať, návrhy píšte do komentárov a ja ešte uvidím, či vám vyhoviem. :)

Nahoru

Příspěvky

Python 3 (7): funkcie (2. časť)
Wrunx 30. 07. 2015, 21:52:02
Odpovědět  Odkaz 
Snad by stálo za to jen letmo zmínit funkce, které nepotřebují pro odevzdání hodnoty příkaz "return", ale využívají příkaz "yield". Ale možná se k tomu tenhle seriál ještě dostane, tak nebudu předbíhat :-)
Štefan Uram Python 3 (7): funkcie (2. časť)
Štefan Uram 30. 07. 2015, 22:12:59
Odpovědět  Odkaz 
Áno, k tomuto by som sa ešte niekde v priebehu seriálu rád dostal :)

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Štefan Uram




Public Relations

Je možné nasadit aplikaci za jediný týden?

CiscoJestli jste někdy řešili nasazování aplikace, asi víte, že všechno odladit může být celkem zdlouhavá záležitost. Dokážete si představit, že na to máte jen týden? Že je to nemožné? Není! Jde to a ani to nemusí být příliš složité.

Pokračování ...


Kingston - velká jarní soutěž

Public Relations

Jak bezpečné jsou bezpečnostní kamery? Nezmeškejte konferenci Axis Talk 2021

AxisÚtoky hackerů čím dál častěji míří na kamerové systémy. Jak se účinně bránit? I to bude tématem online konference společnosti Axis Communications, švédského světového leadera v bezpečnostních a smart city technologiích. Připojte se 20. a 21. dubna!

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 10. April

Zapojte se do tvorby distribuce Mageia

Podílejte se na vytváření balíčků pro Mageiu, dělejte, co je potřeba, staňte se baličem


Pavel Fric

Pavel Fric, 13. March

Lollypop

Lollypop je hudební přehrávač navržený, jak ukazuje jeho podoba, aby výborně zapadl do pracovního...


Pavel Fric

Pavel Fric, 26. February

QElectroTech

Kreslení elektrotechnických i jiných výkresů


Všechny blogy »

Axis Talk 2021