创建保持状态的动态函数

时间:2014-12-24 12:26:52

标签: python python-3.3 function-object dynamic-function

Python初学者问题。假设你想动态创建一个保持某种状态的函数(在代码下面是一个整数i)。然后,由于定义的函数是一个对象,我们以后可以使用它。在下面的代码中,我将函数添加到列表中,每次调用print(fn(0))都应该生成0 1 2 3 4,但我得到4 4 4 4 4,好像只有{{1}的最新值使用。

i

是否可以在Python中完成此代码尝试执行的操作?

2 个答案:

答案 0 :(得分:3)

要解决后期绑定问题,可以使用default keyword parameter:

for i in range(5):
    def fn(x, i=i):  # <-----
        return x + i
    ....

答案 1 :(得分:0)

保留自己状态的功能?我会这样做:

class func:
    # can behave as a function, but can also hold its own value
    def __init__(self, value=0):
        self.value = value

    # this function is the actual 'function' that is called each time
    def __call__(self, arg): 
        self.value += arg
        return self.value

fns = []
for i in range(5):

    # create new function, and give it a starting value of  i
    fn = func(i)

    fns += [fn]


for fn in fns:
    print( fn(0) )

结果为0 1 2 3 4