⊗pyPmFnCl 23 of 129 menu

Aizvērumi Python

Ar aizvērumu (closure) saprot funkciju kopā ar visām ārējām mainīgajām, kas tai ir pieejamas.

Python biežāk, runājot "funkcijas aizvērums", domā nevis pašu funkciju, bet tieši tās ārējos mainīgos.

Pieņemsim, ka mums ir šāda funkcija outer, kurā deklarēts mainīgais i un iekšējā funkcija inner. Tajā i tiks pieskaitīts viens. Lai mainīgais i darbotos korekti, pievienojam tam instrukciju nonlocal:

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

Tagad ieliksim ārējo funkciju mainīgajā res un izsauksim to ar apaļām iekavām:

res = outer() res() # izvadīs 1

Izsauksim res vairākas reizes. Pēc koda izpildes katru reizi skaitītājs i palielināsies par vienu:

res() # izvadīs 2 res() # izvadīs 3 res() # izvadīs 4

Tomēr šeit ir svarīga nianse - katrs funkcijas outer izsaukums palielinās savu skaitītāju. Ieliksim pirmo outer izsaukumu mainīgajā res1, bet otro izsaukumu - mainīgajā res2. Tad secīgi izvadīsim tos konsolē:

res1 = outer() res1() # izvadīs 1 res1() # izvadīs 2 res1() # izvadīs 3 res2 = outer() res2() # izvadīs 1 res2() # izvadīs 2 res2() # izvadīs 3

Dots šāds kods:

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

Sakiet, kas tiks izvadīts konsolē.

Izveidojiet funkciju, kuras katrs izsaukums izsauks nākamo Fibonači skaitli.

Izveidojiet funkciju, kas izvadīs nejaušu veselu skaitli intervālā, bet tā, lai divas reizes pēc kārtas nebūtu vienādi.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt