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 に答える