在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)...
以上代码有效,但我的问题是,是否存在更有效的方法来执行此操作?在我看来,在每次循环迭代中创建一个函数对象在内存/计算时间方面可能会变得低效。
答案 0 :(得分:5)
>>> 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
模块正是您所需要的:
导入部分
def add(a,b):
return a+b
plus5 = partial(add,5)
print plus5(10) # outputs 15