2.14. Definirea funcțiilor¶
O funcție grupează un bloc de cod sub un nume, astfel încât să poată fi apelat din mai multe locuri. Oriunde un calcul, o acțiune sau o lucrare structurată apare de mai multe ori, o funcție o transformă într-un singur lucru cu nume.
Cuvântul-cheie este def:
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
Ieșire:
hello, Alice
hello, Bob
Linia care începe cu def este definiția – creează funcția, dar nu execută corpul. Abia apelul greet("Alice") execută blocul indentat.
2.14.1. Parametri și argumente¶
Numele dintre parantezele de pe linia def sunt parametri – substituenți pentru valorile pe care le va furniza apelantul. Valorile efective transmise sunt argumentele. O funcție poate avea zero sau mai mulți parametri:
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
Un apel cu un număr greșit de argumente generează imediat TypeError.
2.14.2. return¶
O instrucțiune return încheie funcția imediat și returnează o valoare apelantului:
def absolute(x):
if x < 0:
return -x
return x
O funcție care nu ajunge niciodată la un return (sau are un return simplu, fără valoare) returnează None:
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
O funcție poate avea mai multe instrucțiuni return; câștigă prima la care se ajunge, iar restul corpului este omis.
2.14.2.1. Returnarea mai multor valori¶
Python returnează un singur obiect per apel, dar acel obiect poate fi un tuple – iar apelantul îl poate despacheta pe loc:
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
Parantezele din jurul valorii returnate sunt opționale; return a, b și return (a, b) sunt identice.
2.14.3. Docstring-uri¶
Un literal de tip șir plasat ca prima instrucțiune din corpul unei funcții este un docstring. El este stocat pe obiectul funcție și este ceea ce afișează help():
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
IDE-ul afișează docstring-urile în indicatoare (tooltips) când cursorul trece deasupra numelui funcției, așa că până și un rezumat de o linie își merită efortul. Șirurile cu ghilimele triple permit docstring-ului să se întindă pe mai multe linii când sunt utile mai multe detalii.
2.14.4. Convenții de denumire¶
Numele funcțiilor folosesc snake_case – cuvinte cu litere mici separate prin underscore. Numele ar trebui să descrie ce face funcția:
Bine:
read_temperature,parse_header,is_valid.De evitat:
do_stuff,handle1,temp_func.
Un underscore la început (_helper) marchează o funcție ca fiind internă modulului său. Convenția este larg respectată, dar nu este impusă de Python.