2011-09-10 11 views
1

私は私の定義した関数については心配していませんが、組み込み関数やesp。インポートされたモジュールからのもの基本的には、これらのアドバイスはまだ適用されますか? python 3.2はどのように関数呼び出しをループから処理しますか?

http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Local_Variables

http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Avoiding_dots...

私はPyPyのJITがあまりにもここに私を助けていると思うが、私はLinuxクラスタ上でのことを実行する必要があります(と私のソースはすでにPy3kのためです)。

+0

はい、そのまま適用されます。 – agf

+0

これらはCPythonでのみ有効です。たとえば、PyPyの場合は、本当に有害なものとは無関係に軽度に有用なものの間のどこかにある可能性があります。 – fijal

答えて

4

はい。正確なバージョンはそれほど重要ではありません。これらの最適化はすべて、一般的なケース(これはインタプリタが気にするものですが、JITコンパイラは特定のケースでより良いコードを生成することができます)のための簡単で効率的な実装を可能にするセマンティクスでの言語機能の使用を最小限に抑えることに沸きます。具体的には:

  • 属性ルックアップは、かなりファンキーなアルゴリズムに従います。ハッシュテーブルルックアップ(ですが、大きなOはすべてではありません)、継承チェーンのlongish(よくあることではありません)、他の記述子(プロパティ、バインドされたメソッドの取得) )。変数(特にローカル、以下を参照)ルックアップは比較では単純であり、問​​題のオブジェクトが既にスタックの最上部にある場合を除き、必要なバイトコード命令が少なくて済みます。
  • コンパイル時に局所変数を列挙することもできます(スタックを使用した効率的な実装が可能)。モジュールオブジェクトへの参照を持つ人はいつでもグローバルを追加したり削除したりできます。ハッシュテーブルを使用して)。
関連する問題