2.14. Definování funkcí

Funkce zabaluje blok kódu pod jeden název, takže jej lze volat z mnoha míst. Kdekoli se výpočet, akce nebo ucelený kus práce objeví více než jednou, funkce z toho udělá jedinou pojmenovanou věc.

Klíčové slovo je def:

def greet(name):
    print("hello,", name)

greet("Alice")
greet("Bob")

Výstup:

hello, Alice
hello, Bob

Řádek začínající def je definice – vytvoří funkci, ale nespustí její tělo. Volání greet("Alice") je to, co spustí odsazený blok.

2.14.1. Parametry a argumenty

Názvy v závorkách na řádku def jsou parametry – zástupné symboly pro hodnoty, které volající dodá. Skutečné předané hodnoty jsou argumenty. Funkce může přijímat nula nebo více parametrů:

def square(x):
    return x * x

def add(a, b):
    return a + b

def is_even(n):
    return n % 2 == 0

Volání s nesprávným počtem argumentů okamžitě vyvolá TypeError.

2.14.2. return

Příkaz return okamžitě ukončí funkci a předá hodnotu zpět volajícímu:

def absolute(x):
    if x < 0:
        return -x
    return x

Funkce, která nikdy nedosáhne return (nebo má holý return bez hodnoty), vrací None:

>>> def shout(text):
...     print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None

Funkce může mít několik příkazů return; vyhrává ten první dosažený a zbytek těla se přeskočí.

2.14.2.1. Vracení více hodnot

Python vrací jeden objekt na volání, ale tímto objektem může být tuple – a volající jej může na místě rozbalit:

def minmax(values):
    return (min(values), max(values))

lo, hi = minmax([3, 1, 4, 1, 5, 9])

Závorky kolem návratové hodnoty jsou nepovinné; return a, b a return (a, b) jsou totéž.

2.14.3. Dokumentační řetězce

Řetězcový literál umístěný jako první příkaz těla funkce je docstring. Ukládá se do objektu funkce a je tím, co zobrazuje help():

def scale(value, factor):
    """Multiply ``value`` by ``factor`` and return the result."""
    return value * factor

IDE zobrazuje dokumentační řetězce v nápovědách, když kurzor najede na název funkce, takže i jednořádkové shrnutí se vyplatí. Řetězce v trojitých uvozovkách umožňují docstringu zabírat více řádků, když je užitečné více podrobností.

2.14.4. Konvence pojmenování

Názvy funkcí používají snake_case – malá slova oddělená podtržítky. Název by měl popisovat, co funkce dělá:

  • Dobře: read_temperature, parse_header, is_valid.

  • Vyhněte se: do_stuff, handle1, temp_func.

Úvodní podtržítko (_helper) označuje funkci jako interní pro její modul. Tato konvence je široce respektována, ale Pythonem není vynucována.