funcs = []
for i in range(3):
funcs.append(lambda: i)
print([f() for f in funcs])
Многие думают:
[0, 1, 2]
Но Python выведет:
[2, 2, 2]
Почему?
`lambda` не запоминает значение `i` в момент создания.
Она запоминает саму переменную.
Когда цикл закончился, `i` уже равно `2`.
Поэтому все функции смотрят на одно и то же последнее значение.
Правильный фикс:
```python
funcs = []
for i in range(3):
funcs.append(lambda i=i: i)
print([f() for f in funcs])
```
Теперь будет:
```python
[0, 1, 2]
```
Хитрость простая:
если создаёшь функцию в цикле — фиксируй значение через аргумент по умолчанию.