私はDavidBeazleyのPythonリファレンスブックを読んでいて、彼は次のように述べています。
たとえば、多くの平方根演算を実行している場合は、「math.sqrt(x)」と入力するよりも、「from math importsqrt」および「sqrt(x)」を使用する方が高速です。
と:
メソッドやモジュールルックアップを多用する計算の場合、ほとんどの場合、実行する操作を最初にローカル変数に入れて、属性ルックアップを削除することをお勧めします。
私はそれを試してみることにしました:
最初()
def first():
from collections import defaultdict
x = defaultdict(list)
2番目()
def second():
import collections
x = collections.defaultdict(list)
結果は次のとおりです。
2.15461492538
1.39850616455
このような最適化はおそらく私には関係ありません。しかし、なぜビーズリーが書いたのとは逆のことが真実になるのか、私は興味があります。また、1秒の違いがあることに注意してください。これは、タスクが簡単であることを考えると重要です。
なぜこうなった?
アップデート:
私は次のようなタイミングを取得しています:
print timeit('first()', 'from __main__ import first');
print timeit('second()', 'from __main__ import second');