我遇到如下情况:
functions = []
some_list = [('a', 'b'), ('c', 'd')]
for x, y in some_list:
def foo(z):
# do some things
return "{} {} {}".format(x, y, z)
functions.append(foo)
但显然这不起作用,因为x
和y
将始终具有循环中的最后一个值,即'c'和'd',即{{1}和{}中的两个函数{1}}列表将在实践中返回functions
。
如何使它立即执行字符串替换,以便在第一个循环中将foo(z)定义为等效于
'{} c d'.format(z)
没有引用变量def foo(z):
# do some things
return "{} a b".format(z)
和x
?
编辑:我现在意识到我还需要在y
中存储foo
的副本,而不是functions
本身,但问题的其余部分是stll代表。
答案 0 :(得分:1)
您可以在函数定义时将循环值绑定到局部变量:
for x, y in some_list:
def foo(z, a=x, b=y):
return "{} {} {}".format(a, b, z)
functions.append(foo)
functions[0]('foo')
'a b foo'
functions[1]('foo')
'c d foo'