პითონში შიდა ფუნქციებთან მუშაობის ნიუანსები
პითონში შეიძლება არსებობდეს არა მხოლოდ ჩადგმული
ფუნქციები, არამედ ერთი ფუნქცია შეიძლება დააბრუნებდეს
მეორეს. მაგალითად, დავუშვათ ფუნქცია outer
აბრუნებს როგორც შედეგს ფუნქციის inner
საწყის კოდს:
def outer():
def inner():
return '+++'
return inner
დავწეროთ გამოძახება outer
ცვლადში res:
res = outer()
print(res)
კოდის შესრულების შემდეგ გამოიტანება ობიექტი ფუნქციით:
<function outer.<locals>.inner at 0x000001564A212B90>
თუ კი გამოვიძახებთ ცვლადს res
მრგვალი ფრჩხილებით, დააბრუნებს შეტყობინებას
'+++':
print(res()) # გამოიტანს '+++'
შესაძლებელია კოდის ამგვარად გადაწერა, რომ resში
ჩაიწეროს outer ორი მრგვალი
ფრჩხილით - თავისთავად და ფუნქციის
inner გამოსაძახებლად. აქედან გამომდინარეობს, რომ შესაძლებელია
დამატებითი მრგვალი ფრჩხილების ჩაწერა
გარე ფუნქციის მარჯვნივ იმ რაოდენობის მიხედვით,
რამდენჯერაც ის ჩადგმულია მასში:
res = outer()()
print(res) # გამოიტანს '+++'
მოცემულია შემდეგი კოდი:
def outer():
def inner(num):
return num + 2
return inner
res = outer()(3)
print(res)
თქვით, რა გამოიტანს კონსოლში.
მოცემულია შემდეგი კოდი:
def outer():
def inner(txt):
return 'hello, ' + txt
return inner
res = outer()
print(res)
თქვით, რა გამოიტანს კონსოლში.