我有一個函數foo
,它需要2個參數a
和b
。我想創建一個與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)
。
我有一個函數foo
,它需要2個參數a
和b
。我想創建一個與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)
。
您可以使用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))
然後,您可以調用同樣的方式同上。
@idjaw https://en.wikipedia.org/wiki/Currying :) –
...你測試這個?在一個循環中綁定'lambda's的行爲可能會讓你感到驚訝。 – jonrsharpe
如果你命名你的lambda,你不應該使用lambda! –
使用'lambda'或'functools.partial'。但要小心後期綁定:https://stackoverflow.com/q/19837486/3001761 – jonrsharpe
這是一個簡單的例子。我可能會使用更復雜的功能而不是簡單的foo。 – 2ank3th
那麼,那又如何?你仍然使用相同的工具來做到這一點。 – jonrsharpe