Drkcore

20 03 2011 Python Tweet

disのソースコード読んだ

disassembleっていう関数が面白かった

例えば

>>> add = lambda x,y:x+y

っていう関数を定義して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

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021