【发布时间】:2015-10-11 19:17:17
【问题描述】:
我想用指定的参数包装一个函数,比如functools.partial,但它没有按预期工作:
source_codes = (0, 1, 2)
def callback(source, *args):
print 'callback from source: ', source
funcs = []
for source in source_codes:
funcs.append(lambda *args: callback(source, *args))
for i, func in enumerate(funcs):
print 'source expected: ', i
func()
print
输出:
source expected: 0
callback from source: 2
source expected: 1
callback from source: 2
source expected: 2
callback from source: 2
但是……我想要的是:
source expected: 0
callback from source: 0
source expected: 1
callback from source: 1
source expected: 2
callback from source: 2
如果我使用functools.partial,我知道它可以工作,但我想知道我的代码中的真正问题... lambda 包装器是否使用全局变量source?
【问题讨论】: