0

我刚刚看到亚历克斯·马泰利今晚展示了这一点。我没有听懂他解释为什么这里的速度差异如此之大,我仍然很好奇:

% 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()呢?诚然,这个例子有点做作,因为我不知道它是否可以推广到所有可能的不带参数的函数。这里的引擎盖下发生了什么?

4

2 回答 2

7

f不做任何事情。它不叫f。你也可能有

def f(): pass

"foo"

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

>>> def f(): print("Foo!")
... 
>>> f()
Foo!
>>> f
<function f at 0x10ebe9830>
>>> 
于 2012-12-05T06:32:02.037 回答
2

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

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

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

f()
>>> foo
于 2012-12-05T06:33:12.827 回答