我有以下代码:
funcs = []
for i in range(10):
def func():
print i
funcs.append(func)
for f in funcs:
f()
问题是func
正在被覆盖。即代码的输出是:
9
9
9
...
如果没有定义新功能,你将如何解决这个?
最佳解决方案是更改函数的名称。即:
for i in range(10):
def func+i():
...
(或其他一些奇怪的语法)
答案 0 :(得分: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()
默认参数在定义函数时被计算一次,因此递增循环不会影响它们。如果您使用
,这也可以def func(i=i):
print i
但是我使用了名称value
来明确函数中使用的名称。
答案 1 :(得分:0)
从另一个函数is safest返回func
。
答案 2 :(得分:0)
你可以尝试
for i in range(10):
def func(j=i):
print j
funcs.append(func)
for f in funcs:
f()