2017-07-01 85 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! –

相关问题