2011-11-08 12 views
5

Making a Python script Object-Orientedに対するAlex Martelliの回答では、モジュールレベルのコードを関数に入れて、関数を呼び出す方がPythonで高速であると述べています。なぜ誰かがPythonのすべての実装に当てはまるかどうか、そしてそれが本当かどうかを説明することはできますか?なぜモジュールレベルのコードを関数に入れて、関数を呼び出すのがPythonで高速ですか?

答えて

7

これは主に可変ルックアップによるものです。グローバルスコープで変数を検索するには、辞書検索が必要です。対照的に、コンパイラはローカル名を静的に決定し、それらをインデックスで参照するため、辞書検索は不要です。

Python 2.xでは、関数内にexec文が存在すると、名前を静的に判別できないため、この最適化は無効になります。 Python 3.xでは、exec()は通常の関数なので、ローカルスコープの変数を変更することはできません。

+0

これは、Jython、IronPython、PyPyでも同様です。それらはすべて辞書検索とローカルスコープを使ってグローバルスコープを実装していますか? – inman320

+0

@ inman320:いいえ、これは他のPythonの実装では成立しません。 PyPyでは、モジュールや関数レベルのコード間の速度に違いはないはずです(JITコンパイラを使用します)。私は他の実装がどのように機能するのか分かりません。 –

関連する問題