@yavaskript

Как в данном примере значения попадают в лямбда-функцию?

def multiplier():
    return [lambda x, i=i: i*x for i in range(4)]
    
print([m(2) for m in multiplier()])
print([m(4) for m in multiplier()])


Объясните, пожалуйста, как 2 и 4 попадают в лямбда-функцию? И как работает for m in multiplier
?
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
multiplier возвращает список return [...] из 4 элементов, каждый элемент которой - лямбда-функция

>>> multiplier()
[<function multiplier.<locals>.<listcomp>.<lambda> at 0x10aa5b620>, <function multiplier.<locals>.<listcomp>.<lambda> at 0x10aa5b510>, <function multiplier.<locals>.<listcomp>.<lambda> at 0x10aa5b598>, <function multiplier.<locals>.<listcomp>.<lambda> at 0x10aa5b840>]


Мы по нему итерируемся, в цикле присваивая параметру m эти лямбда-функции:
>>> m = lambda x, i=0: i*x
>>> m(2)
0
>>> m = lambda x, i=1: i*x
>>> m(2)
2
...

лямбда осуществляет замыкание переменной i
и передаем недостающий параметр x в лямбду
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы