Funcții în Python
Definirea Funcțiilor
Forma de bază
def salut():
print("Salut, lume!")
salut() # Apelarea funcției
Cu parametri
def salut(nume):
print(f"Salut, {nume}!")
salut("Ana") # Salut, Ana!
Cu valoare returnată
def aduna(a, b):
return a + b
rezultat = aduna(3, 5) # 8
Parametri și Argumente
Parametri cu valori implicite
def salut(nume, mesaj="Bună ziua"):
print(f"{mesaj}, {nume}!")
salut("Ana") # Bună ziua, Ana!
salut("Ion", "Salutare") # Salutare, Ion!
Argumente poziționale și cu nume
def info(nume, varsta, oras):
print(f"{nume}, {varsta} ani, din {oras}")
# Poziționale
info("Ana", 25, "București")
# Cu nume (keyword arguments)
info(oras="Cluj", nume="Ion", varsta=30)
# Mixte (poziționale ÎNTÂI)
info("Maria", oras="Iași", varsta=22)
*args - Număr variabil de argumente
def suma(*numere):
total = 0
for n in numere:
total += n
return total
suma(1, 2) # 3
suma(1, 2, 3, 4) # 10
**kwargs - Argumente cu nume variabile
def afiseaza(**kwargs):
for cheie, val in kwargs.items():
print(f"{cheie}: {val}")
afiseaza(nume="Ana", varsta=25)
# nume: Ana
# varsta: 25
Scope și Variabile
Variabile locale
def functie():
x = 10 # Variabilă locală
print(x)
functie()
# print(x) # Eroare! x nu există aici
Variabile globale
x = 100 # Variabilă globală
def citeste():
print(x) # OK - citire
def modifica():
global x
x = 200 # Necesită 'global' pentru modificare
citeste() # 100
modifica()
citeste() # 200
Funcții și Mutabilitate
Parametri imutabili (pass by value-like)
def modifica_int(x):
x = x + 1
return x
n = 5
modifica_int(n)
print(n) # 5 - nu s-a modificat!
Parametri mutabili (pass by reference-like)
def modifica_lista(L):
L.append(4)
lista = [1, 2, 3]
modifica_lista(lista)
print(lista) # [1, 2, 3, 4] - s-a modificat!
Reatribuirea nu modifică originalul
def f(L):
L = [10, 20] # Reatribuire - nou obiect
return L
lista = [1, 2, 3]
rezultat = f(lista)
print(lista) # [1, 2, 3] - neschimbat
print(rezultat) # [10, 20]
Funcții ca Obiecte
def dublu(x):
return x * 2
# Funcția este un obiect
f = dublu
print(f(5)) # 10
# Poate fi pasată ca argument
numere = [1, 2, 3]
rezultat = list(map(dublu, numere))
print(rezultat) # [2, 4, 6]
De Reținut
Când pasați o listă sau dicționar unei funcții și o modificați în loc (cu
.append(),[key]=val), modificați originalul. Dar dacă reatribuiți parametrul (L = [...]), creați un obiect nou.
Întrebări de Verificare
- Ce diferență este între parametri și argumente?
- Cum definești un parametru cu valoare implicită?
- Ce se întâmplă când modifici o listă primită ca parametru?
- De ce trebuie să folosești
globalpentru a modifica variabile globale?