给定一个可以自行评估的节点,但对于例如列表理解ast
来说不够字面意思ast.literal_eval
src = '[i**2 for i in range(10)]'
a = ast.parse(src)
现在a.body[0]
是一个ast.Expr
和a.body[0].value
一个ast.ListComp
。我想获得eval(src)
将产生的列表,但只给出ast.Expr
节点。
给定一个可以自行评估的节点,但对于例如列表理解ast
来说不够字面意思ast.literal_eval
src = '[i**2 for i in range(10)]'
a = ast.parse(src)
现在a.body[0]
是一个ast.Expr
和a.body[0].value
一个ast.ListComp
。我想获得eval(src)
将产生的列表,但只给出ast.Expr
节点。
也许您正在寻找compile()
?调用compile()
AST 对象的结果是可以传递给eval()
.
>>> src = '[i**2 for i in range(10)]'
>>> b = ast.parse(src, mode='eval')
>>> eval(compile(b, '', 'eval'))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]