Python / AST: 如何根据规则集重命名所有变量

Python / AST: How to rename all variables according to rule set

是否有一种工具能够遍历 Python 文件中的所有变量和函数参数,并根据样式规则替换它们?例如,给定 myModule.py

中的函数
def myFunc(Variable):
    Tmp = sin(Variable)
    return Tmp * 2

有没有可以像下面这样调用的工具

> tool myModule.py --variable-begin-with-lowercase

要产生下面的结果?

def myFunc(variable):
    tmp = sin(variable)
    return tmp * 2

我想,该工具应该警告干扰现有变量的重命名。

您可以使用 ast.NodeTransformer:

import ast
class toLower(ast.NodeTransformer):
    def visit_arg(self, node):
       return ast.arg(**{**node.__dict__, 'arg':node.arg.lower()})
    def visit_Name(self, node):
       return ast.Name(**{**node.__dict__, 'id':node.id.lower()})

code = """
def myFunc(Variable):
   Tmp = sin(Variable)
   return Tmp * 2
"""
new_code = ast.unparse(toLower().visit(ast.parse(code)))
print(new_code)

输出:

def myFunc(variable):
   tmp = sin(variable)
   return tmp * 2