Închiderea în Python

Periodic, în diferite surse, aici sunt astfel de bucăți de cod:

Ce este asta? În mod obișnuit, această definiție a funcției inner_func se numește închidere - am definit o funcție în interiorul unei alte funcții (externe), închizându-o cu privire la funcția exterioară.







Și de ce sunt necesare? Pentru ce sunt închiderile?

  • Eliminarea constantelor codate greu
  • Eliminarea variabilelor globale în cod
  • Pentru a implementa TOE

Totul arată minunat, dar din nou nu este clar: "sho tse takie" oo. Seamănă cu o definiție a decoratorului, aceasta returnează o funcție. Nu-ee este de înțeles. După cum mi se pare, confuzia este creată din cauza percepției general acceptate a închiderilor izolate de origini. Dacă ne întoarcem la cartea excelentă "Structura și interpretarea programelor de calculator", găsim o definiție foarte simplă a închiderii:

În general, funcționarea combinării obiectelor de date are proprietatea de închidere în cazul în care rezultatele conectării obiectelor care utilizează această operație pot fi ele însele asociate prin aceeași operație







Codul de mai sus nu trebuie să genereze plângeri. Se potrivește în mod clar definiției. În același timp, din această definiție devine clar că noțiunea de "închidere" este mult mai largă. De exemplu, lista. Elementele listei pot fi, de asemenea, liste, ceea ce reprezintă o închidere în sensul SICP. Numai în mediul pythonic nu este acceptat să se acorde atenție acestui lucru și nu există nici un sens special. Metodele obiectului sunt, de asemenea, închideri. Ele sunt închise în raport cu obiectul de sine, care este întotdeauna trecut prin primul argument.

Aplicarea închiderilor

Odată cu aplicarea unei închideri în Python, vă întâlniți în fiecare zi. Acestea sunt metode și decoratori de funcții și clase, liste, tuple etc. Luați în considerare un exemplu de închidere sub forma unui decorator, verificând ce metodă HTTP a fost accesată la vizualizare în cadrul Django. Funcționează după cum urmează: verificăm metoda, dacă metoda este permisă, executăm vizualizarea, dacă nu este permisă o aruncare excepțională:

Și în cele din urmă

Există o nuanță. În Python, variabilele închise sunt doar pentru citire. Pentru a ocoli această limitare, trebuie să închideți variabilele tipului de container: liste, tupluri etc. Variabilele închise nu pot fi suprascrise, dar conținutul containerului - vă rog.

Căldura puternică cu privire la închideri nu ar trebui să fie. Dezvoltatorii de limbi străine s-au gândit deja la tot. În special, ei și-au făcut cererea cât mai transparentă pentru programatori. Dar cunoașterea caracteristicilor sacre vă va ajuta să vă simțiți mai bine și să înțelegeți mai profund comportamentul codului dvs. python.

Urmați publicațiile noastre și veți afla mai multe despre caracteristicile sacre ale Python, care vă vor face un programator remarcabil Python! ^ __







Articole similare

Trimiteți-le prietenilor: