Python functools部分效率
我一直在使用Python,并且设置了以下代码情况:
import timeit
setting = """
import functools
def f(a,b,c):
pass
g = functools.partial(f,c=3)
h = functools.partial(f,b=5,c=3)
i = functools.partial(f,a=4,b=5,c=3)
"""
print timeit.timeit('f(4,5,3)', setup = setting, number=100000)
print timeit.timeit('g(4,5)', setup = setting, number=100000)
print timeit.timeit('h(4)', setup = setting, number=100000)
print timeit.timeit('i()', setup = setting, number=100000)
结果如下:
f: 0.181384086609
g: 0.39066195488
h: 0.425783157349
i: 0.391901016235
为什么调用部分函数需要更长的时间?局部函数只是将参数转发到原始函数还是在整个过程中映射静态参数?而且,在所有参数都已预定义的情况下,Python中是否有一个函数可以返回填充的函数主体,例如函数i?
-
为什么调用部分函数需要更长的时间?
partial
由于附加的函数调用,的代码花费的时间大约是原来的两倍。函数调用很昂贵:Python中的函数调用开销相对较高,尤其是与内置函数的执行速度相比。
--
局部函数只是将参数转发到原始函数还是在整个过程中映射静态参数?
据我所知-
是的,它只是将参数转发给原始函数。--
而且,在所有参数都已预定义的情况下,Python中是否有一个函数可以返回填充的函数主体,例如函数i?
不,我不了解Python中的此类内置函数。但是我认为可以做您想做的事情,因为函数是可以复制和修改的对象。
这是一个原型:
import timeit import types # http://stackoverflow.com/questions/6527633/how-can-i-make-a-deepcopy-of-a-function-in-python def copy_func(f, name=None): return types.FunctionType(f.func_code, f.func_globals, name or f.func_name, f.func_defaults, f.func_closure) def f(a, b, c): return a + b + c i = copy_func(f, 'i') i.func_defaults = (4, 5, 3) print timeit.timeit('f(4,5,3)', setup = 'from __main__ import f', number=100000) print timeit.timeit('i()', setup = 'from __main__ import i', number=100000)
这使:
0.0257439613342 0.0221881866455