⊗pyPmFnCl 23 of 129 menu

Клопкунии дар Python

Клопкунӣ (closure) функсиеро бо ҳамаи тағирёбандаҳои беруна, ки барои он дастрасанд, дар назар дорад.

Дар Python, аксаран, вақте ки мегӯянд "клопкунии функсия", на худи он функсияро, балки айнан тағирёбандаҳои берунии онро дар назар доранд.

Бигзор мо функсияи зерини outer-ро дошта бошем, дар он тағирёбандаи i ва функсияи дохилии inner эълон шудааст. Дар он ба i як воҳид илова карда мешавад. Барои он ки тағирёбандаи i дуруст кор кунад, дастури nonlocal-ро ба он илова мекунем:

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

Акнун биёед функсияи беруниро дар тағирёбандаи res гузорем ва онро бо қавсҳои гирд фаро кунем:

res = outer() res() # 1-ро чоп мекунад

Биёед res-ро чанд бор фаро кунем. Пас аз иҷрои рамз, ҳар дафъа шуморкунандаи i як воҳид зиёд мешавад:

res() # 2-ро чоп мекунад res() # 3-ро чоп мекунад res() # 4-ро чоп мекунад

Аммо дар ин ҷо нуқтаи муҳиме мавҷуд аст - ҳар даъвати функсияи outer шуморкунандаи худро зиёд мекунад. Биёед даъвати якуми outer-ро дар тағирёбандаи res1 сабт кунем, ва даъвати дуввумро - дар тағирёбандаи res2. Сипас онҳоро ба тартиб дар консол чоп кунем:

res1 = outer() res1() # 1-ро чоп мекунад res1() # 2-ро чоп мекунад res1() # 3-ро чоп мекунад res2 = outer() res2() # 1-ро чоп мекунад res2() # 2-ро чоп мекунад res2() # 3-ро чоп мекунад

Рамзи зерин дода шудааст:

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

Бигӯед, чӣ дар консол чоп мешавад.

Функсияе созед, ки ҳар даъвати он рақами навбатии Фибоначчиро фаро мехонад.

Функсияе созед, ки адади тасодуфии бутунро дар фосила медиҳад, аммо ба тавре ки ду бор пай дар пай якхела набошад.

Тоҷикӣ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан