我设置了一个简单的自定义函数,它接受一些默认参数(Python3.5):def foo(a=10, b=20, c=30, d=40):
return a * b + c * d
并在指定或不指定参数值的情况下对其进行不同的调用:
不指定参数:
^{pr2}$
指定参数:%timeit foo(a=10, b=20, c=30, d=40)
The slowest run took 12.83 times longer than the fastest. This could mean that an intermediate result is being cached
1000000 loops, best of 3: 446 ns per loop
如您所见,指定参数的调用和未指定参数的调用所需的时间有一些明显的增加。在简单的一次性调用中,这可能可以忽略不计,但如果对函数进行大量调用,开销会扩大并变得更加明显:
无参数:%timeit for i in range(10000): foo()
100 loops, best of 3: 3.83 ms per loop
带参数:%timeit for i in range(10000): foo(a=10, b=20, c=30, d=40)
100 loops, best of 3: 4.68 ms per loop
同样的行为也存在于python2.7中,这些调用之间的时间差实际上要大一点foo() -> 291ns和{}
为什么会这样?我是否应该在调用期间尽量避免指定参数值?在