2017-04-02 11 views
2

我想實現這樣的如何在python中創建函數列表?

list1 = [lambda x: x+0, lambda x: x+1] 

做這個

list2 = [lambda x: x+n for n in range(2)] 

但它不工作! (爲什麼不?) 如何以編程方式創建函數列表?

+1

因爲拉姆達結合'N'到最後一個元素。 –

回答

1

n由用於表達重新分配,所以對於表達完成後都將看到的n值是這個問題的1

更典型的例子可以是沒有列表表達式可見:

list3 = [] 
for n in range(2): 
    def f(x): 
     return x + n 
    list3.append(f) 

這裏所有創建的函數對象都會引用相同的變量n,它將被賦值爲1,並且這兩個函數對象將以lambda x: x + 1的形式運行。

您可以通過爲每個創建的函數變量創建額外的範圍對付它:

a = [(lambda n: lambda x: x+n)(n) for n in range(2)] 
+0

確實,這是我第一次嘗試,然後我認爲lambda可能會起作用,除非不...... – Ziofil

相關問題