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

问题描述:

我刚刚看到Alex Martelli今晚演示了这个。我没听清他为什么在这里有一个在速度如此大的差异的解释,我还是很好奇:Python:为什么只调用“f”比“f()”快4倍?

% 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()?无可否认,这个例子有点做作,因为我不知道它是否推广到没有任何参数的所有可能的函数。这里隐藏着什么?

+1

因为你不知道你在做什么。第一行执行f()方法。这就是为什么()被使用。第二行是无所事事。奇怪的问题 –

f什么也没做。它不叫f。你可能也有

def f(): pass 

"foo" 

为了进一步详细描述,这里是在交互模式下运行的输出:

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

好吧,这很尴尬。下次我会实际运行代码。谢谢! –

+0

@abarkingspider如果您的问题现在已解答,请随时[接受最值得回答的答案](http://meta.stackexchange.com/a/5235)。 – user4815162342

当你刚刚进入f它只是调用对象上,并没有做任何事情,当你叫f()它实际上执行的功能

当你将它输入一个解释你会发现一个区别:

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

f() 
>>> foo