⊗pyPmFnCl 23 of 129 menu

Fermetures en Python

Par fermeture (closure) on entend une fonction ainsi que toutes les variables externes qui lui sont accessibles.

En Python, le plus souvent, en disant "fermeture d'une fonction", on ne désigne pas la fonction elle-même, mais précisément ses variables externes.

Supposons que nous ayons la fonction outer suivante, dans laquelle est déclarée une variable i et une fonction interne inner. Dans celle-ci, on ajoutera un à i. Pour que la variable i fonctionne correctement, ajoutons l'instruction nonlocal :

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

Maintenant, plaçons la fonction externe dans la variable res et appelons-la avec des parenthèses :

res = outer() res() # affichera 1

Appelons res plusieurs fois. Après l'exécution du code, le compteur i augmentera de un à chaque fois :

res() # affichera 2 res() # affichera 3 res() # affichera 4

Cependant, il y a une nuance importante ici - chaque appel de la fonction outer augmentera son propre compteur. Enregistrons le premier appel de outer dans la variable res1, et le deuxième appel - dans la variable res2. Ensuite, affichons-les successivement dans la console :

res1 = outer() res1() # affichera 1 res1() # affichera 2 res1() # affichera 3 res2 = outer() res2() # affichera 1 res2() # affichera 2 res2() # affichera 3

Voici le code suivant :

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

Dites ce qui sera affiché dans la console.

Créez une fonction dont chaque appel renverra le nombre de Fibonacci suivant.

Créez une fonction qui renverra un nombre entier aléatoire dans un intervalle, mais de telle sorte qu'il n'y ait pas deux fois le même nombre consécutivement.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser