from やら import やらの解決について 1/n

名前解決分からんです。

https://twitter.com/__10100__/status/241068654811308032:twitter

https://twitter.com/__10100__/status/241071295691882496:twitter

ってことがあってコードのディスアセンブルすれば何かわかるかなと思い以下のページを参考に調べました。(調査中)

参照1: 31.12. dis ― Python バイトコードの逆アセンブラ (STORE_NAME が表示されていない。英語版と見比べるとどこにあるかわかる。)

参照2: dis – Python バイトコードディスアセンブラ

結果

環境: Python 2.7.2, Debian 6.0.5

$ cat hoge.py
import foo.bar.baz as hoge
$ python -m dis hoge.py
  1           0 LOAD_CONST               0 (-1)
              3 LOAD_CONST               1 (None)
              6 IMPORT_NAME              0 (foo.bar.baz)
              9 LOAD_ATTR                1 (bar)
             12 LOAD_ATTR                2 (baz)
             15 STORE_NAME               3 (hoge)
             18 LOAD_CONST               1 (None)
             21 RETURN_VALUE
$ cat fuga.py
from foo.bar import baz as hoge
$ python -m dis fuga.py
  1           0 LOAD_CONST               0 (-1)
              3 LOAD_CONST               1 (('baz',))
              6 IMPORT_NAME              0 (foo.bar)
              9 IMPORT_FROM              1 (baz)
             12 STORE_NAME               2 (hoge)
             15 POP_TOP
             16 LOAD_CONST               2 (None)
             19 RETURN_VALUE

違うことは分かったんですが、不明な点があってわからんです。

不明点

  • 4 つめの数字の意味
  • 参照1 に記載のある次の変数 co_consts, co_names (定数と名前のスタック?)

引き続き調査ですね。