disassembleっていう関数が面白かった
例えば
っていう関数を定義してdisってみると
>>> import dis
>>> dis.dis(add)
1 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 RETURN_VALUE
となっている。
バイトコード命令はfunc_code.co_codeで見ることが出来る
>>> add.func_code.co_code
'|\x00\x00|\x01\x00\x17S'
これは整数値を文字にしたものをつなげた文字列として表現されているので、逆の操作をしてopcodeモジュールのopnameで対応を取ることができる
>>> from opcode import opname
>>> code = add.func_code.co_code
>>> for c in code:
... print opname[ord(c)]
...
LOAD_FAST
STOP_CODE
STOP_CODE
LOAD_FAST
POP_TOP
STOP_CODE
BINARY_ADD
RETURN_VALUE