Funkci v Python'u zavedeme pomocí klíčového slova def
:
pass
je prázdná operace. Jelikož odsazování slouží v Python'u k určení těla bloku, použijeme pass
často právě na místě, kde teprve kód dopíšeme.
Trošku rozumnější příklad:
Je dobrým zvykem na prvním místě těla funkce uvádět tzv. dokumentační řetězec. Má-li více než jednu řádku, je jeho ustálená podoba následující:
Tyto dokumentační řetězce jsou součástí pythonovského kódu a dá se na ně programově dostat (čehož využívají některé nástroje a mimo jiné vestavěná funkce help
):
Zatímco dokumentační řetězec je částí kódu a můžeme ho tudíž použít mimo jiné pro vytvoření jinak (zatím) prázdného těla funkce (tedy místo pass
), s komentářem tomu tak nepřekvapivě již není:
Komentář z hlediska interpretru totiž vůbec neexistuje (je v kódu jen a jen pro nás) – místo bloku jsme tak vlastně nenapsali nic:
Jinými slovy: Tam, kde je očekáván blok, musí blok být! Byť by byl vyroben právě jen pomocí pass
nebo dokumentačního řetězce.
V Python'u všechny funkce, které explicitně nic nevrací, vrací None
:
None
potlačeno, pokud si ho explicitně pomocí print
nevyžádáme.
Pro srovnání zde je chování při explicitním vrácení jen a pouze právě None:
Jinak ovšem funkce v Python'u mohou vracet prakticky cokoliv:
Funkce mohou mít argumenty. Ty se standardně předávají pozičně:
Kromě pozičních argumentů můžeme s výhodou využít argumenty pojmenované. Zadávají se ve formě keyword = value a v nejjednodušším (a nejméně užitečném) případě slouží „pouze“ pro zpřehlednění volání funkce:
Užitečnějším použitím jsou výchozí (default) hodnoty argumentů:
round
pro zaokrouhlování reálných čísel na uvedený počet míst za desetinnou čárkou – neuvedete-li počet míst, výchozí hodnotou je 0:
Ale pozor – otočit pořadí pozičních a pojmenovaných argumentů už nemůžete:
Výchozí hodnotou pojmenovaného argumentu může být i odkaz na proměnnou, ale tyto odkazy se vyhodnucují ve chvíli definice funkce v aktuálním defining scope.
Dalším „průšvihem“ je, pokud jako parametr použijete proměnný (mutable) typ, ale to probereme až později.
Díky tomuto chování funkcí je možné v Python'u snadno napsat funkce, které přebírají libovolný počet vstupních pozičních argumentů a ještě navrch k tomu i řídicí parametry pojmenované. Přesně tak, jak to dělá například vestavěná funkce print().
Ale to není ani zdaleka všechno, co pythoní funkce se svými parametry umí. Mezi další oblíbené „triky“ patří například:
Asi můžeme v klidu říci, že funkce jsou spolu s n-ticemi tou vůbec nejdůležitější součástí Python'u.