Python:在函数定义时用变量进行字符串替换

时间:2017-11-05 16:54:04

标签: python scope functional-programming

我遇到如下情况:

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)

但显然这不起作用,因为xy将始终具有循环中的最后一个值,即'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代表。

1 个答案:

答案 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'