2017-02-20 74 views
0

我想創建一個包含單項最高程度的列表ň的Python - 附加功能的列表

basis = [lambda x:x**i for i in range(0,n+1)] 

然而,這產生的ñ功能列表,但所有的同一個(度ñ),而不是0,1,2度,... ñ

我嘗試沒有列表理解,以及:

basis = [] 
for i in range(0,n+1): 
    basis.append(lambda x:x**i) 

但結果相同。用經典函數定義代替lambda函數也沒有解決它。


我檢查Python lambdas and scoping,但這並沒有幫助,因爲我不想存儲函數值做,但功能本身。舉例來說,我希望能夠調用

basis[0](34) 

,應返回

1 
+0

你可以用'partial'做到這一點(https://docs.python.org/3/library/functools.html#functools .partial),但你需要一個* proper *函數聲明 –

回答

-1

此項概括起來完全

http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closures

...你可以創建一個閉包,通過使用像這樣的默認參數立即綁定到它的參數:

def create_multipliers(): 
     return [lambda x, i=i : i * x for i in range(5)] 

您的代碼將成爲:

basis = [lambda x,i=i:x**i for i in range(0,n+1)] 

這是一個有點哈克解決方案,但工程。我仍然強烈建議您閱讀提供的鏈接,因爲在您剛接觸Python時,通常會犯這3個錯誤。

+0

它接縫這是一個鏈接唯一的答案。 – Arman

+0

不支持鏈接的答案。將相關文本複製到答案中,並使用鏈接獲取支持細節。 – Barmar

0

正如我在評論中說,看看partial

def f(x, n): 
    return x**n 

basis = [partial(f, n=i) for i in range(10)] 
print(basis[0](34)) # 1