Një mbyllje është një objekt funksioni që ka akses në variablat në shtrirjen e tij leksikore mbyllëse, edhe kur funksioni thirret jashtë atij fushëveprimi. Me fjalë më të thjeshta, një mbyllje është një funksion që kujton vlerat nga mjedisi në të cilin është krijuar, edhe nëse ato vlera nuk janë më në shtrirje.

Në Python, një mbyllje krijohet kur një funksion i mbivendosur i referohet një ndryshoreje nga shtrirja e tij mbyllëse.

Për shembull:

Në këtë shembull, funksioni i brendshëm "inner_func" i referohet ndryshores "x" nga funksioni i tij mbyllës "outer_func". Kur thirret "outer_func" me një vlerë për "x", ai kthen objektin e funksionit "inner_func". Funksioni i kthyer "inner_func" kujton vlerën e "x" nga shtrirja e tij mbyllëse, edhe pse "outer_func" ka përfunduar ekzekutimin dhe "x ” nuk është më në fushëveprim.

Ne mund të përdorim mbylljen për të krijuar një funksion të ri që shton një vlerë fikse në vlerën origjinale të "x":

Në këtë shembull, ne krijojmë një funksion të ri "add_five" duke thirrur "outer_func" me një vlerë prej 5 për "x". Funksioni i kthyer "add_five" merr një argument "y" dhe e shton atë në vlerën e "x", që është 5. Kur ne thërrasim "add_five" me një vlerë 3, ai shton 3 në 5 dhe kthen 8.

Mbylljet mund të jenë shumë të dobishme në Python për krijimin e funksioneve me sjellje që varet nga gjendja e jashtme, si memoizimi ose dekoruesit. Këtu është një shembull i një funksioni memorizimi që përdor mbyllje:

Në këtë shembull, ne përcaktojmë një funksion të rendit më të lartë "memorize" që merr një funksion "func" si argument të tij. Funksioni "memorize" kthen një funksion të ri "memorized_func" që memorizon rezultatet e "func" duke përdorur një fjalor cache.

Mbyllja "memorized_func" ka qasje në variablin "cache" nga shtrirja e saj mbyllëse, e cila përdoret për të ruajtur rezultatet e "func. ” Kur “memorized_func” thirret me argumente, ai fillimisht kontrollon nëse argumentet janë tashmë në cache. Nëse po, ai kthen rezultatin e memorizuar. Nëse jo, ai thërret "func" me argumentet, ruan rezultatin në cache dhe e kthen rezultatin.

Ne mund ta përdorim këtë funksion memorizimi për të memorizuar çdo funksion tjetër duke e kaluar atë si një argument për "memorizimin".

Për shembull:

Në këtë shembull, ne përdorim një dekorues për të mësuar përmendësh funksionin Fibonacci "fib". Simboli "@" është një stenografi për aplikimin e funksionit "memorize" në funksionin "fib".

Si përfundim, një mbyllje është një objekt funksioni që ka akses në variablat në shtrirjen e tij leksikore mbyllëse. Mbylljet krijohen kur një funksion i ndërthurur i referohet një ndryshoreje nga shtrirja e tij mbyllëse. Mbylljet mund të përdoren për të krijuar funksione me sjellje që varet nga gjendja e jashtme, të tilla si memoizimi ose dekoruesit. Mbylljet janë një tipar i fuqishëm i Python që lejojnë kodin fleksibël dhe shprehës.

Nëse ju duk i dobishëm ky postim, ju lutemi jepni një duartrokitje dhe mos harroni të më ndiqni për më shumë përmbajtje Python dhe këshilla programimi në të ardhmen!