我有以下代码:
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来说明函数中使用了哪个名字.
| 归档时间: |
|
| 查看次数: |
2076 次 |
| 最近记录: |