⊗pyPmFnCl 23 of 129 menu

Chiusure in Python

Per chiusura (closure) si intende una funzione insieme a tutte le variabili esterne ad essa accessibili.

In Python, spesso, quando si dice "chiusura di una funzione", ci si riferisce non alla funzione stessa, ma proprio alle sue variabili esterne.

Supponiamo di avere la seguente funzione outer, in cui è dichiarata una variabile i e una funzione interna inner. In essa a i verrà aggiunto uno. Affinché la variabile i funzioni correttamente, aggiungiamo ad essa l'istruzione nonlocal:

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

Ora mettiamo la funzione esterna in una variabile res e chiamiamola con le parentesi tonde:

res = outer() res() # stamperà 1

Chiamiamo res più volte. Dopo l'esecuzione del codice ogni volta il contatore i aumenterà di uno:

res() # stamperà 2 res() # stamperà 3 res() # stamperà 4

Tuttavia c'è una sfumatura importante qui - ogni chiamata della funzione outer aumenterà il proprio contatore. Mettiamo la prima chiamata di outer in una variabile res1, e la seconda chiamata - in una variabile res2. Poi stampiamole in sequenza nella console:

res1 = outer() res1() # stamperà 1 res1() # stamperà 2 res1() # stamperà 3 res2 = outer() res2() # stamperà 1 res2() # stamperà 2 res2() # stamperà 3

È dato il seguente codice:

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

Dite cosa verrà stampato nella console.

Create una funzione, ogni chiamata della quale restituirà il numero di Fibonacci successivo.

Create una funzione che restituirà un numero intero casuale in un intervallo, ma in modo che non sia lo stesso due volte di seguito.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta