Ce face def
Cu def grupezi un set de instrucțiuni sub un nume. Funcția primește date prin parametri, face ceva cu ele și, opțional, trimite înapoi un rezultat cu return. O funcție fără return returnează None.
Parametrii pot avea valori implicite (tva=0.21), iar la apel poți da argumentele după nume (pret_final(100, tva=0.09)). *args adună argumentele în plus într-un tuplu, iar **kwargs adună argumentele cu nume într-un dicționar.
Primul rând din corpul funcției poate fi un text între ghilimele triple, numit docstring. El descrie funcția și apare în help().
Exemple
Exemplul 1: Funcție cu parametru implicit
def pret_final(pret, tva=0.21):
"""Returnează prețul cu TVA inclus."""
return round(pret * (1 + tva), 2)
print(pret_final(100))
print(pret_final(100, tva=0.09))
Rezultat
121.0
109.0
Exemplul 2: *args și **kwargs
def suma(*numere):
return sum(numere)
def profil(nume, **detalii):
print(nume, detalii)
print(suma(1, 2, 3, 4))
profil("Ana", oras="Iași", varsta=25)
Rezultat
10
Ana {'oras': 'Iași', 'varsta': 25}
Exemplul 3: Funcție fără return
O funcție care doar afișează returnează None.
def saluta(nume):
print(f"Salut, {nume}!")
rezultat = saluta("Mihai")
print(rezultat)
Rezultat
Salut, Mihai!
None
Greșeli frecvente
- Folosești o listă sau un dicționar ca valoare implicită (
def adauga(x, lista=[])). Lista este creată o singură dată și păstrează valorile între apeluri. Foloseștelista=Noneși creeaz-o în funcție. - Apelezi funcția înainte de rândul cu
def. În Python funcția trebuie definită înainte de a fi apelată. - Uiți
returnși te miri că rezultatul esteNone.
Comenzi înrudite
return: Încheie funcția și trimite un rezultat înapoi către cel care a apelat-o.lambda: Creează o funcție mică, fără nume, scrisă pe un singur rând.global și nonlocal: Permit unei funcții să modifice o variabilă din afara ei: globală (global) sau din funcția care o conține (nonlocal).yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.