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

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

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