同一行代码的三种样子
拿 print("hi") 这一行,分别看它的词数、树的顶层节点类型、编译产物里记下的名字:
import ast, io, tokenize
LINE = 'print("hi")'
SRC2 = 'x = 1 + 2'
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]
t = ast.parse(LINE)
code = compile(LINE, "<s>", "exec")
print(str(len(toks(LINE))) + "/" + type(t.body[0]).__name__
+ "/" + "/".join(code.co_names))
全部评论