În această lecție, vom discuta despre închideri (closures) în Python, ce sunt ele și vom oferi exemple de închideri.
Ce sunt închiderile?
O închidere (closure) în Python reprezintă o funcție înglobată (nested) care își amintește de starea mediului în care a fost definită, chiar și după ce mediul extern nu mai există. În alte cuvinte, o închidere permite unei funcții să „închidă” peste variabilele libere din domeniul său, făcându-le disponibile pentru execuția ulterioară.
Închiderile sunt utilizate în mod obișnuit pentru a crea funcții parametrizate sau funcții care generează alte funcții cu anumite comportamente.
Exemple de închideri
Exemplu 1: Generarea unei funcții de înmulțire
def creare_inmultire(factor):
def inmultire(x):
return x * factor
return inmultire
# Crearea unei funcții de înmulțire cu 5
inmultire_cu_5 = creare_inmultire(5)
# Utilizarea funcției de înmulțire cu 5
rezultat = inmultire_cu_5(3)
print("Rezultatul înmulțirii 3 cu 5:", rezultat)
În acest exemplu, funcția creare_inmultire primește un argument factor și generează o funcție internă inmultire care înmulțește un număr cu acest factor. Funcția internă inmultire se închide peste variabila factor, reținându-i valoarea.
Exemplu 2: Contorizarea apelurilor unei funcții
def creare_contor():
apeluri = 0
def contor():
nonlocal apeluri
apeluri += 1
return apeluri
return contor
# Crearea unui contor
contor = creare_contor()
# Apelarea funcției contor de mai multe ori
print("Numărul de apeluri:", contor()) # 1
print("Numărul de apeluri:", contor()) # 2
print("Numărul de apeluri:", contor()) # 3
În acest exemplu, funcția creare_contor generează o funcție internă contor care se închide peste variabila apeluri. Funcția contor își amintește de numărul de apeluri efectuate, chiar și după ce funcția creare_contor și-a încheiat execuția.
Prin utilizarea închiderilor în Python, puteți crea funcții parametrizate, funcții care generează alte funcții și funcții care își amintesc de starea lor internă, oferind un nivel suplimentar de flexibilitate și putere în programare.