【发布时间】:2010-02-08 15:06:26
【问题描述】:
我有以下代码:
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():
...
(或其他一些奇怪的语法)
【问题讨论】:
-
不需要更改函数的名称。名字只是名字。一旦你将它分配给 funcs,你的函数的名称也可能是
funcs[0]、funcs[1]、funcs[2]等。具有不同名称的函数可能很重要的唯一原因是你是否在搞乱func.__name__。而且你不应该这样做。