def în Python

Funcții Python 3.0+

Definește o funcție: un bloc de cod cu nume, pe care îl poți apela de oricâte ori.

Sintaxă
def nume_functie(parametru1, parametru2=valoare_implicita):
    ...
    return rezultat

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ște lista=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 este None.

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.