Как мне создать список лямбда-выражений Python (в цикле понимания списка / for)?

Я предполагаю, что лямбда, которую scope вы создаете в понимании списка, привязана lambda-expressions к переменной i, которая в py конечном итоге заканчивается scope на 5. Таким образом, когда python-shell вы оцениваете лямбды постфактум, все scope они привязаны к 5 и В итоге scope получается 25. То же самое list-comprehension происходит с num во втором scope примере. Когда вы оцениваете lambda-functions лямбду внутри цикла, оно variable-scope num не изменилось, поэтому closure вы получаете правильное значение. После lambda-functions цикла число равно 5 ...

Я list-comprehension не совсем понимаю, что вы generic-lambda собираетесь делать, поэтому py не знаю, как предложить решение. Как pythonic насчет этого?

def square(x): return lambda : x*x
listOfLambdas = [square(i) for i in [1,2,3,4,5]]
for f in listOfLambdas: print f()

Это дает мне python ожидаемый результат:

1
4
9
16
25

Другой py способ думать об этом - лямбда lambda «захватывает» свое лексическое lambda-functions окружение в том месте, где py оно создается. Таким образом, если list-comprehension вы дадите ему число, он фактически lambda не разрешит это значение lambda-functions до тех пор, пока не будет pythonic вызван. Это одновременно python сбивает с толку и мощно.

python

lambda

scope

closures

list-comprehension

2022-11-06T15:14:28+00:00
Вопросы с похожей тематикой, как у вопроса:

Как мне создать список лямбда-выражений Python (в цикле понимания списка / for)?