Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗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
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა