Я пришел из мира SQL, и я новичок в этом. Я нашел на w3shools.com похожий код:

def myfunc(n, m):
    return lambda a : a * n * m

mydoubler = myfunc(2, 6)
print(mydoubler(15))

Я не могу понять, как параметр a, который, как я полагаю, равен "15" в вызове, становится доступным для лямбды. Я искал и не смог найти описание логической и программной парадигмы.

0
IKnowSomeThings 4 Фев 2022 в 14:42

3 ответа

Лямбда-функция является анонимной функцией, это означает, что лямбда-выражение само по себе является функцией, но является встроенным. здесь вы создали функцию, которая будет возвращать лямбда-выражение, вычисляющее произведения a, n и m, поэтому возвращаемое значение будет таким. мы знаем, что когда мы возвращаем функцию, мы можем сохранить то, что мы вернули, в переменной, в нашем случае мы вернули лямбда-функцию, поэтому вам нужно ввести значение. если не понятно, спрашивай

0
Zakaria Ayadi 4 Фев 2022 в 14:55

Лямбда-функция — это функция, но без имени. Единственная разница в том, как выглядит определение хо. Ваш вырезанный код может быть переведен на:

def myfunc(n, m):

    def some_func(a):
        return a * n * m

    return some_func

mydoubler = myfunc(2, 6)
print(mydoubler(15))

И результат был бы тот же. Из официальной документации по Python Лямбда-выражения:

Как и определения вложенных функций, лямбда-функции могут ссылаться на переменные из содержащей их области видимости.

Поэтому для функции доступны значения n и m. Значение a передается при выполнении mydoubler.

0
w8eight 4 Фев 2022 в 15:05

Это подробный ответ:

Прежде всего, вы создали функцию myfunc, которая требует 2 аргумента "n" и "m". то вы вернете лямбда-функцию, которая принимает аргумент «а» и возвращает произведение «а», «n» и «m». затем вы объявили переменную mydoubler, значение которой является возвращаемым значением myfunc, которое является этой лямбдой. представьте, что mydoubler = lambda a: a * 2 * 6. и, наконец, вы напечатали возвращаемое значение mydoubler, которое является функцией, а аргумент a равен 15. если вы не поняли формат лямбда для mydoubler, вот оно, но как обычно функция: def mydoubler(a): вернуть * 2 * 6 не забудьте, 2 это значение n и 6 это значение m

0
Zakaria Ayadi 4 Фев 2022 в 15:08
Спасибо за ответ. Я не уверен, что понимаю ваш ответ. если код, который я предоставил, такой же, как «def mydoubler(a): return a * 2 * 6» (или, как я понимаю, «return a * m * n»), и в качестве параметра передается только «a», то как "m" и "n" передаются в mydoubler? Кажется, что это меняет одно затруднение на другое. Спасибо.
 – 
IKnowSomeThings
4 Фев 2022 в 15:16
Посмотрите, вы уже передали значения для n и m при назначении mydoubler. вы написали mydoubler = myfunc(2,6) = lambda a: a * 2 * 6. Таким образом, тип данных mydoubler — это функция, которая требует аргумента «a».
 – 
Zakaria Ayadi
4 Фев 2022 в 15:28
@IKnowSomeThings, другими словами, mydoubler является эквивалентом этой функции: def mydoubler(a): ....return a * 2 * 6
 – 
Zakaria Ayadi
4 Фев 2022 в 15:33
Если вам нужно другое объяснение, просто спросите меня :)
 – 
Zakaria Ayadi
4 Фев 2022 в 15:37