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
是否有一种工具能够遍历 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