gpt4 book ai didi

python - 如何用 Python AST 中的值替换变量名?

转载 作者:行者123 更新时间:2023-12-01 08:05:00 26 4
gpt4 key购买 nike

我希望我的用户能够在命令行上以 Python 语法输入算术表达式,并在运行时将变量名称替换为值。我不想只使用 eval,我想使用 Abstract Syntax Trees .

例如,假设我想用值 3.5 重写 AST 中的每个变量,然后对其求值。通过阅读文档,我想到了这一点。

import ast

class RewriteName(ast.NodeTransformer):

def visit_Name(self, node):
return ast.copy_location(ast.Num(n=3.5, ctx=node.ctx), node)

tree = ast.parse('a + b', 'eval')
tree = RewriteName().visit(tree)
ast.fix_missing_locations(tree)
o = compile(tree, '<string>', 'eval')
print(eval(o))

我希望打印 7.0 但我收到以下错误。

o = compile(tree, '<string>', 'eval')
TypeError: expected Expression node, got Module

我理解 AST 关于 ExpressionExpr 的命名法令人困惑,但我还没有找到如何对此进行排序的示例。我尝试了 compile 的各种参数,包括在 tree 的各个子节点上运行它,认为其中之一可能是我需要的表达式,但到目前为止没有成功。

实现此功能的示例代码是什么?

最佳答案

我使用错误的参数调用 ast.parse 。正确的调用方式是

tree = ast.parse('a+b', '', eval)

(请参阅上面的评论。)

关于python - 如何用 Python AST 中的值替换变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55581163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com