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