⊗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
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა