创建动态函数

2024-04-16 21:14:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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中完成这段代码要做的事情?你知道吗


Tags: 对象函数代码in列表for定义状态
2条回答

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

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

保持自身状态的函数?我会这样做:

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

相关问题 更多 >