使用具有多个参数的函数的单个参数创建函数的最佳方法是什么?

时间:2014-06-24 20:08:52

标签: python

在python中,我有一个定义为

的函数f(x,y)
def f(x,y):
    return x + y

现在我想为运行时确定的固定值y定义函数g(x)= f(x,y)。在我的特定情况下,我循环遍历y的几个值,并且需要为每次迭代生成此函数g(x):

for y in range(0,10):
    def g(x):
        return f(x,y)
    #do something with g(x)...

以上代码有效,但我的问题是,是否存在更有效的方法来执行此操作?在我看来,在每次循环迭代中创建一个函数对象在内存/计算时间方面可能会变得低效。

3 个答案:

答案 0 :(得分:5)

使用functools.partial

>>> def f(x, y):
    return x * y

>>> from functools import partial
>>> g = partial(f, y=2)
>>> g(3)
6

答案 1 :(得分:3)

这不是一个真正的功能,但取决于你的do something实际上是什么,使用lambda表达式可能就足够了:

>>> def f(x, y):
...   return x * y
...
>>> g = lambda x: f(x, 2)
>>> g(3)
6

性能方面,它似乎比functools.partial更快(使用Python 2.7.5):

$ python -mtimeit -s 'def f(x, y): return x * y' -s 'g = lambda x: f(x, 2)' 'g(9)'
1000000 loops, best of 3: 0.364 usec per loop
$ python -mtimeit -s 'def f(x, y): return x * y' -s 'from functools import partial' -s 'g = partial(f, y=2)' 'g(9)'
1000000 loops, best of 3: 0.378 usec per loop

答案 2 :(得分:1)

functools模块正是您所需要的:

来自functools的

导入部分

def add(a,b):
    return a+b

plus5 = partial(add,5)
print plus5(10) # outputs 15