KamilKamil
Июль 26, 2022 18:41:37
Всем привет.
Помогите пожалуйста новичку. Не понимаю, как “add” стал “func” !?!?
Если есть возможность, укажите плиз, правильно ли я прописал комментарии?
Заранее спасибо!
def add(x, y): # создаем функцию
return x+y # указываем операцию между аргументами функции
def do_twice(func, x, y): # создаем ещё одну функцию. func, это и есть add. НЕ ПОНИМАЮ, КАК ЭТО ПОЛУЧИЛОСЬ?!?!?!?
return func(func(x, y), func(x, y)) # здесь функция add выполняется в скобках дважды. Получается так: func((5+10), (5+10)), которые переходят в func(15, 15).
a = 5
b = 10
print(do_twice(add, a, b)) # тут add, это a+b(5+10), a= 5, b=10. Итого получается, 30
KamilKamil
Июль 27, 2022 09:26:02
Огромное спасибо, Palrom.
Особенно за комментарии)
Правда так и не понял логики, по которой add(x, y) превратился в func(x, y) . Или эта история нелогична?) А просто как правило, которое надо запомнить?)))
Если логика есть, подскажи пожалуйста, в Интернете где-нибудь есть подробный разбор таких подстановок?
Palrom
Июль 27, 2022 10:58:00
KamilKamil
Или эта история нелогична?) А просто как правило, которое надо запомнить?
Всё там как раз таки логично. Но запомнить нужно во всяком случае, понимание может прийти не сразу просто.
KamilKamil
так и не понял логики, по которой add(x, y) превратился в func(x, y)
Ни что ни во что не превратилось. У функции есть позиционный аргумент func(термины аргумент и параметр почти взаимозаменяемы). func в данном случае - это просто подсказка, идентификатор входных данных подпрограммы (функции). Так как параметр func позиционный и стоит первым, то, что передано в эту функцию первым аргументом при её вызове, и будет подставлено (связано) с формальным параметром и будет далее обрабатываться в теле функции, везде, где обозначен параметр func.
KamilKamil
Если логика есть, подскажи пожалуйста, в Интернете где-нибудь есть подробный разбор таких подстановок?
Лучше всего читать профильные книжки. Скачай и прочитай Лутц М. Изучаем Python 5-е издание. Там есть глава Функции и генераторы и в ней всё подробно расписано, и про сопоставление аргументов (параметров) и про ссылки, и про то как функции работают с изменяемыми и неизменяемыми данными и многое другое.
Можно глянуть вот эту статью
https://docs-python.ru/tutorial/opredelenie-funktsij-python/и те что по ссылкам там приводятся тоже
https://docs-python.ru/tutorial/opredelenie-funktsij-python/proishodit-moment-vyzova-funktsii/в частности
KamilKamil
Июль 27, 2022 12:06:31
Теперь понял)
Спасибо!!!
Благодаря этому предложению:
“Так как параметр func позиционный и стоит первым, то, что передано в эту функцию первым аргументом при её вызове, и будет подставлено (связано) с формальным параметром и будет далее обрабатываться в теле функции, везде, где обозначен параметр func.”