Python:为什么调用“f”运行>比“f()”快4倍?

时间:2012-12-05 06:29:46

标签: 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

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

2 个答案:

答案 0 :(得分:7)

f没有做任何事情。它不会调用f。你可能还有

def f(): pass

"foo"

进一步详细说明,这是以交互模式运行时的输出:

>>> def f(): print("Foo!")
... 
>>> f()
Foo!
>>> f
<function f at 0x10ebe9830>
>>> 

答案 1 :(得分:2)

当你输入f时,它只是调用对象而没有做任何事情,当你调用f()时它实际上执行了函数

当您将其输入解释器时,您会注意到不同之处:

def f():
    print "foo"
f
>>> <function f at 0x02D64670>

f()
>>> foo