Python:动态定义函数

Guy*_*Guy 4 python lambda

我有以下代码:

 funcs = []
 for i in range(10):
   def func():
      print i
   funcs.append(func)

 for f in funcs:
   f()
Run Code Online (Sandbox Code Playgroud)

问题是func正在被覆盖.即代码的输出是:

9
9
9
...
Run Code Online (Sandbox Code Playgroud)

如果定义新功能,您将如何解决这个问题?

最佳解决方案是更改函数的名称.即:

for i in range(10):
   def func+i():
...
Run Code Online (Sandbox Code Playgroud)

(或其他一些奇怪的语法)

jcd*_*yer 13

问题不在于func被覆盖,而是i在调用函数时评估值,而不是在定义函数时.如果要i在定义时进行求值,请将其放在函数声明中,作为默认参数func.

funcs = []
for i in range(10):
    def func(value=i):
        print value
    funcs.append(func)

for f in funcs:
    f()
Run Code Online (Sandbox Code Playgroud)

定义函数时,默认参数计算一次,因此递增循环不会影响它们.如果您使用,这也可以

def func(i=i):
    print i
Run Code Online (Sandbox Code Playgroud)

但是我用这个名字value来说明函数中使用了哪个名字.