我有一个函数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