カテゴリー
Uncategorized

[Python] 変数名を取得する

ほとんど dis.disassemble からのコピペ。

実際どういうところで使うんですか ?

import sys
from opcode import *
def name(variable):
"""get argument variable's name."""
frame = sys._getframe(1)
co = frame.f_code
code = co.co_code
i = 0; n = frame.f_lasti - 2
oparg = extended_arg = 0
while i < n:
c = code[i]
op = ord(c)
i = i + 1
if op >= HAVE_ARGUMENT:
oparg = ord(code[i]) + ord(code[i + 1]) * 256 + extended_arg
extended_arg = 0
i = i + 2
if op == EXTENDED_ARG:
extended_arg = oparg * 65536L
if op in hasconst:
return co.co_consts[oparg]
elif op in hasname:
return co.co_names[oparg]
elif op in haslocal:
return co.co_varnames[oparg]
elif op in hasfree:
return (co.co_cellvars + co.co_freevars)[oparg]
raise ValueError('The argument may be syntax. Or unknown error occured.')
>>> name(sys)
sys
>>> a = ''
>>> name(a)
a

最適化対策とかで引数を使う振りくらいした方がいいのかな。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です