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.