0

可能重复:
Python 嵌套函数中的局部变量

这是我的问题,我需要在 python 中动态创建函数。我有一个参数列表,我需要为这个列表的每个元素创建一个函数。

这是一个例子:

list_func = []
list_param = ['foo','bar']

for param in list_param:
    def print_func():
        print(param)

    list_func += [print_func]

for func in list_func:
    func()

使用此代码,第二个循环将仅打印最后一个参数。这是输出:

bar
bar

我需要

foo
bar

谢谢

4

4 回答 4

2

用于functools.partial此。

>>> import functools
>>> def print_func(param):
...     print(param)
...     
>>> list_func = [functools.partial(print_func, x) for x in ["foo", "bar"]]
>>> list_func[0]()
foo
>>> list_func[1]()
bar

或者,您可以定义一个可调用类:

class Printer(object):
    def __init__(self, param):
        self.param = param

    def __call__(self):
        print(self.param)

然后list_func = [Printer(x) for x in ["foo", "bar"]]。当您的功能变得复杂时,这可能是一个好主意。

于 2012-11-16T10:51:03.363 回答
1
list_func = []
list_param = ['foo', 'bar']

for param in list_param:
    def print_func(arg=param): #Look at this string
        print(arg)

    list_func.append(print_func)

for func in list_func:
    func()
于 2012-11-16T11:00:37.573 回答
1

我刚刚修改了你的代码:

list_func = []
list_param = ['foo','bar']

def make_print_func(param):
    def print_func():
        print(param)
    return print_func

list_func += [make_print_func(param) for param in list_param]

for func in list_func:
    func()

现在有一个函数make_print_func可以即时生成您需要的函数。

输出是这样的:

foo
bar
于 2012-11-16T10:58:58.950 回答
1

您可以使用lambda

In [87]: list_func = []

In [88]: list_param = ['foo','bar']

In [89]: for param in list_param:
    list_func.append(lambda i=param:i)
   ....:     


In [91]: list_func[0]()
Out[91]: 'foo'

In [92]: list_func[1]()
Out[92]: 'bar'
于 2012-11-16T10:55:53.320 回答