2.14. Definiranje funkcija

Funkcija pakira blok koda pod imenom kako bi se mogao pozivati s mnogo mjesta. Gdje god se izračun, radnja ili oblikovani komad posla pojavi više puta, funkcija ga pretvara u jednu imenovanu cjelinu.

Ključna riječ je def:

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

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

Ispis:

hello, Alice
hello, Bob

Redak koji počinje s def je definicija – stvara funkciju, ali ne izvršava tijelo. Poziv greet("Alice") je ono što izvršava uvučeni blok.

2.14.1. Parametri i argumenti

Imena u zagradama u retku def su parametri – rezervirana mjesta za vrijednosti koje će pozivatelj navesti. Stvarne proslijeđene vrijednosti su argumenti. Funkcija može uzeti nula ili više parametara:

def square(x):
    return x * x

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

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

Poziv s pogrešnim brojem argumenata odmah podiže TypeError.

2.14.2. return

Naredba return odmah završava funkciju i vraća vrijednost pozivatelju:

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

Funkcija koja nikada ne dosegne return (ili ima goli return bez vrijednosti) vraća None:

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

Funkcija može imati nekoliko return naredbi; pobjeđuje prva dosegnuta, a ostatak tijela se preskače.

2.14.2.1. Vraćanje više vrijednosti

Python vraća jedan objekt po pozivu, ali taj objekt može biti tuple – a pozivatelj ga može raspakirati na licu mjesta:

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

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

Zagrade oko povratne vrijednosti su neobavezne; return a, b i return (a, b) su isto.

2.14.3. Docstringovi

Niz znakova postavljen kao prva naredba u tijelu funkcije je docstring. Pohranjuje se na objektu funkcije i to je ono što prikazuje help():

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

IDE prikazuje docstringove u skočnim opisima kada se pokazivač zadrži iznad imena funkcije, pa se isplati čak i jednolinijski sažetak. Nizovi s trostrukim navodnicima omogućuju da se docstring proteže kroz više redaka kada je korisno više detalja.

2.14.4. Konvencije imenovanja

Imena funkcija koriste snake_case – riječi malim slovima odvojene podvlakama. Ime bi trebalo opisivati što funkcija radi:

  • Dobro: read_temperature, parse_header, is_valid.

  • Izbjegavajte: do_stuff, handle1, temp_func.

Vodeća podvlaka (_helper) označava funkciju kao internu njezinom modulu. Konvencija se naširoko poštuje, ali je Python ne provodi prisilno.