簡體   English   中英

Python:動態定義函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM