1

Pythonのバイトコードで最適化されている場所がいくつあるか教えてもらえますか?最近、Pythonのバイトコードを逆コンパイルしようとしていましたが、Pythonのバージョン2.5には多くの最適化があることがわかりました。たとえば、このコードに対して

a,b,c=([],[],[])#build list

version2.5より前の最適化されていないバイトコードは次のようなものです。

BUILD_LIST_0
BUILD_LIST_0
BUILD_LIST_0
BUILD_LIST_4
UNPACK_LIST_
STORE_NAME 'a'
STORE_NAME 'b'
STORE_NAME 'c'

バージョン2.5では、最適化されたバイトコードは次のようになります。

BUILD_LIST_0
BUILD_LIST_0
BUILD_LIST_0
ROT_THREE
ROT_TWO
STORE_FAST 'a'
STORE_FAST 'b'
STORE_FAST 'c'

これはほんの一例ですが、他にも多くの場所が最適化される可能性があります。それで、これらの最適化を明確にするための、またはそれらすべてを見つけることができる方法を教えてくれるドキュメントがあることを誰かが知っていますか?

4

2 に答える 2

2

Python / peephole.cソースファイルは、基本的にすべてのそのような最適化が実行される場所です-ここで動的ソースブラウザにアクセスするのに問題があるため、私が提供したリンクは現在のバージョン(2.6以降)へのリンクですが、一度再び機能しますが、(たとえば)2.5.2に存在していたバージョンや、この情報が必要な他の特定のバージョンなど、特定のバージョンを簡単に確認できます。

于 2009-06-18T05:46:05.460 に答える
0

ドキュメント自体はないと思いますが、Pythonインタープリター用のCコードはあります。ここでいくつかの異なるバージョンを見つけることができます。

于 2009-06-18T05:41:59.710 に答える