⊗pyPmFnCl 23 of 129 menu

Închideri în Python

Prin închidere (closure) se înțelege o funcție împreună cu toate variabilele externe la care are acces.

În Python, cel mai adesea, spunând "închiderea unei funcții", se referă nu la funcția în sine, ci mai degrabă la variabilele ei externe.

Să presupunem că avem următoarea funcție outer, în care este declarată variabila i și o funcție internă inner. În aceasta, la i va fi adăugată o unitate. Pentru ca variabila i să funcționeze corect, adăugăm instrucțiunea nonlocal:

def outer(): i = 0 def inner(): nonlocal i i += 1 print(i) return inner

Acum să punem funcția externă în variabila res și să o apelăm cu paranteze rotunde:

res = outer() res() # va afișa 1

Să apelăm res de mai multe ori. După executarea codului, de fiecare dată contorul i va crește cu o unitate:

res() # va afișa 2 res() # va afișa 3 res() # va afișa 4

Cu toate acestea, există o nuanță importantă aici - fiecare apel al funcției outer va incrementa propriul său contor. Să notăm primul apel outer în variabila res1, iar al doilea apel - în variabila res2. Apoi să le afișăm secvențial în consolă:

res1 = outer() res1() # va afișa 1 res1() # va afișa 2 res1() # va afișa 3 res2 = outer() res2() # va afișa 1 res2() # va afișa 2 res2() # va afișa 3

Este dat următorul cod:

def outer(): i = 10 def inner(): nonlocal i i -= 2 print(i) return inner res1 = outer() res1() res1() res2 = outer() res2() res2() res2()

Spuneți ce va fi afișat în consolă.

Creați o funcție, fiecare apel al căreia va returna următorul număr Fibonacci.

Creați o funcție care va genera un număr întreg aleatoriu într-un interval, dar astfel încât să nu fie același de două ori la rând.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge