2017-07-01 52 views
0

我有一個函數foo,它需要2個參數ab。我想創建一個與foo類似的函數列表,但值a已修復。將具有2個變量的方法轉換爲一個變量

def foo(a,b): 
    return a*b 

fooList = [] 
for i in range(n): 
    fooList.append(foo(i)) 

我想fooList[i]返回一個功能類似於foo(i, b)

+3

使用'lambda'或'functools.partial'。但要小心後期綁定:https://stackoverflow.com/q/19837486/3001761 – jonrsharpe

+0

這是一個簡單的例子。我可能會使用更復雜的功能而不是簡單的foo。 – 2ank3th

+1

那麼,那又如何?你仍然使用相同的工具來做到這一點。 – jonrsharpe

回答

1

您可以使用functools.partial

from functools import partial 

def foo(a, b): 
    return a * b 

fooList = [] 
for i in range(n): 
    fooList.append(partial(foo, i)) 

然後,你會怎麼做fooList[i](5)計算i * 5


您也可以咖喱lambda功能,有點像這樣:

for i in range(n): 
    fooList.append((lambda x: lambda y: x * y)(i)) 

然後,您可以調用同樣的方式同上。

+0

@idjaw https://en.wikipedia.org/wiki/Currying :) –

+3

...你測試這個?在一個循環中綁定'lambda's的行爲可能會讓你感到驚訝。 – jonrsharpe

+2

如果你命名你的lambda,你不應該使用lambda! –

相關問題