Я пытаюсь использовать замыкания, чтобы исключить переменную из сигнатуры функции (приложение должно записывать все функции, необходимые для подключения сигналов Qt для интерфейса, для управления большим количеством параметров в словаре, в котором хранятся значения),
Я не понимаю, почему случай использования lambda
, не завернутого в другую функцию, возвращает имя для всех случаев.
names = ['a', 'b', 'c']
def test_fun(name, x):
print(name, x)
def gen_clousure(name):
return lambda x: test_fun(name, x)
funcs1 = [gen_clousure(n) for n in names]
funcs2 = [lambda x: test_fun(n, x) for n in names]
# this is what I want
In [88]: for f in funcs1:
....: f(1)
a 1
b 1
c 1
# I do not understand why I get this
In [89]: for f in funcs2:
....: f(1)
c 1
c 1
c 1