0

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

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

    def fn(x):
        return x + i

    fns += [fn]
print(fns)

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

是否有可能在 Python 中完成这段代码试图做的事情?

4

2 回答 2

3

要解决后期绑定问题,您可以使用默认关键字参数:

for i in range(5):
    def fn(x, i=i):  # <-----
        return x + i
    ....
于 2014-12-24T12:29:57.920 回答
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

于 2014-12-24T12:44:39.277 回答