[英]Python: defining functions on the fly
我有以下代碼:
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():
...
(或其他一些奇怪的語法)
問題不在於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
來明確函數中使用的名稱。
從另一個函數返回func
是最安全的 。
你可以試試
for i in range(10):
def func(j=i):
print j
funcs.append(func)
for f in funcs:
f()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.