Форум сайта python.su
Всем привет.
Помогите пожалуйста новичку. Не понимаю, как “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
Офлайн
def add(x, y): # создаем функцию return x + y # возвращаем результат сложения x и y def do_twice(func, x, y): # func это формальный параметр, а add фактический, то есть он задаётся непосредственно при вызове функции. return func(func(x, y), func(x, y)) # То есть функция, получив add в качестве фактического параметра, # подставляет её на место func и по сути возвращает add(add(5, 10), add(5, 10)) то есть (5+10) + (5+10) a = 5 b = 10 print(do_twice(add, a, b)) # тут add, это a+b(5+10), a= 5, b=10. Нет, "add" тут это функция "add", "a" это "5", а "b" это "10". Все вычисления происходят уже в функции do_twice. # А здесь мы просто передаём ей все инструменты для работы, можно сказать.
Отредактировано Palrom (Июль 26, 2022 20:34:47)
Офлайн
Огромное спасибо, Palrom.
Особенно за комментарии)
Правда так и не понял логики, по которой add(x, y) превратился в func(x, y) . Или эта история нелогична?) А просто как правило, которое надо запомнить?)))
Если логика есть, подскажи пожалуйста, в Интернете где-нибудь есть подробный разбор таких подстановок?
Офлайн
KamilKamilВсё там как раз таки логично. Но запомнить нужно во всяком случае, понимание может прийти не сразу просто.
Или эта история нелогична?) А просто как правило, которое надо запомнить?
KamilKamilНи что ни во что не превратилось. У функции есть позиционный аргумент func(термины аргумент и параметр почти взаимозаменяемы). func в данном случае - это просто подсказка, идентификатор входных данных подпрограммы (функции). Так как параметр func позиционный и стоит первым, то, что передано в эту функцию первым аргументом при её вызове, и будет подставлено (связано) с формальным параметром и будет далее обрабатываться в теле функции, везде, где обозначен параметр func.
так и не понял логики, по которой add(x, y) превратился в func(x, y)
KamilKamilЛучше всего читать профильные книжки. Скачай и прочитай Лутц М. Изучаем Python 5-е издание. Там есть глава Функции и генераторы и в ней всё подробно расписано, и про сопоставление аргументов (параметров) и про ссылки, и про то как функции работают с изменяемыми и неизменяемыми данными и многое другое.
Если логика есть, подскажи пожалуйста, в Интернете где-нибудь есть подробный разбор таких подстановок?
Отредактировано Palrom (Июль 27, 2022 13:41:34)
Офлайн
Теперь понял)
Спасибо!!!
Благодаря этому предложению:
“Так как параметр func позиционный и стоит первым, то, что передано в эту функцию первым аргументом при её вызове, и будет подставлено (связано) с формальным параметром и будет далее обрабатываться в теле функции, везде, где обозначен параметр func.”
Офлайн