⊗pyPmFnCl 23 of 129 menu

Domknięcia w Pythonie

Przez domknięcie (closure) rozumie się funkcję wraz ze wszystkimi zewnętrznymi zmiennymi, które są dla niej dostępne.

W Pythonie, mówiąc "domknięcie funkcji", częściej ma się na myśli nie samą tę funkcję, a właśnie jej zewnętrzne zmienne.

Załóżmy, że mamy następującą funkcję outer, w której zadeklarowana jest zmienna i i funkcja wewnętrzna inner. W niej do i będzie dodawana jedynka. Aby zmienna i działała poprawnie, dodajemy do niej instrukcję nonlocal:

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

Teraz przypiszmy funkcję zewnętrzną do zmiennej res i wywołajmy ją z nawiasami okrągłymi:

res = outer() res() # wypisze 1

Wywołajmy res kilka razy. Po wykonaniu kodu za każdym razem licznik i będzie zwiększany o jeden:

res() # wypisze 2 res() # wypisze 3 res() # wypisze 4

Jednakże jest tu ważny niuans - każde wywołanie funkcji outer będzie zwiększać swój własny licznik. Przypiszmy pierwsze wywołanie outer do zmiennej res1, a drugie wywołanie - do zmiennej res2. Następnie wypiszmy je kolejno w konsoli:

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

Dany jest następujący kod:

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

Powiedz, co zostanie wypisane w konsoli.

Stwórz funkcję, której każde wywołanie będzie zwracać kolejną liczbę Fibonacciego.

Stwórz funkcję, która będzie zwracać losową liczbę całkowitą z przedziału, ale tak, aby dwa razy z rzędu nie była taka sama.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć