我有兴趣编写一个程序,该程序使用 Python 的内置AST 模块来随机修改任意 Python 源中的常量。
这种转换可能涉及使用 AST 模块定义的操作遍历抽象语法树表示。该模块提供了两个选项:首先,ast.walk()返回对 AST 中所有节点的引用,但不提供任何上下文信息,因此无法重新组装树。其次,文档描述了涉及ast.NodeTransformer类的第二种方法:几个文档来源一般描述了如何使用 NodeTransformer。
但是,NodeTransformer 文档没有提到如何将条件替换随机应用于 AST。具体来说,我想修改此功能以创建一个函数,该函数在 ast 中选择一个随机节点,随机选择与该节点关联的常数,并将该常数替换为随机选择的相同类型的常数。
我怀疑我很难理解如何正确修改 NodeTransformer,因为我很少以面向对象的风格进行编程(通常遵循功能范式)。希望将我指向正确的方向会很容易对你们中的一个人来说。