function lambda выводит не то, что мне нужно
def create_multiplications(n):
return [lambda f: i*n for i in range(n)]
получаем [12, 12, 12, 12] - нужно получить [0, 4, 8, 12]
получаем [6, 6, 6] - нужно получить [0, 3, 6]
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Все лямбды в вашем коде делят одну и ту же переменную i. Привыкайте создавая замыкания прятать каждую лямбду в свой контекст:
def create_multiplications(n):
def make(v):
return lambda f: v
return [make(i * n) for i in range(n)]
print(*(f(None) for f in create_multiplications(4)))
print(*(f(None) for f in create_multiplications(3)))
$ python temp.py 0 4 8 12 0 3 6
Если вам нравятся именно лямбды, то можно так. Код читается тяжело, но это то же самое:
def create_multiplications(n):
return [(lambda v: lambda f: v)(i * n) for i in range(n)]