一行代码的四站产物
print("hi") 走完四站,各站留下什么:词数、树里那次调用的类型、编译期记下的名字、常量表第一项。
import ast, io, tokenize
LINE = 'print("hi")'
def toks(src):
skip = (tokenize.NEWLINE, tokenize.NL, tokenize.ENDMARKER,
tokenize.INDENT, tokenize.DEDENT)
return [t.string for t in tokenize.generate_tokens(io.StringIO(src).readline)
if t.type not in skip]
code = compile(LINE, "<s>", "exec")
t = ast.parse(LINE)
print(str(len(toks(LINE))) + "/" + type(t.body[0].value).__name__
+ "/" + code.co_names[0] + "/" + str(code.co_consts[0]))
全部评论