Python:为什么调用"f"运行速度比"f()"快4倍?

a b*_*der 0 python

我刚才看到Alex Martelli今晚展示了这一点.我没有理解为什么这里存在如此大的速度差异,而且我仍然很好奇:

% python -mtimeit -s'def f(): pass' 'f()'
10000000 loops, best of 3: 0.121 usec per loop
% python -mtimeit -s'def f(): pass' 'f'
10000000 loops, best of 3: 0.0265 usec per loop
Run Code Online (Sandbox Code Playgroud)

那么为什么f跑得比这快得多f()呢?不可否认,这个例子有点人为,因为我不知道它是否会推广到所有不带参数的函数.引擎盖下发生了什么?

Wal*_*han 7

f什么都不做 它没有打电话f.你可能也有

def f(): pass

"foo"
Run Code Online (Sandbox Code Playgroud)

进一步说明,这是在交互模式下运行时的输出:

>>> def f(): print("Foo!")
... 
>>> f()
Foo!
>>> f
<function f at 0x10ebe9830>
>>> 
Run Code Online (Sandbox Code Playgroud)