Fra*_*fer 1 python abstract-syntax-tree
是否有一种工具能够迭代 Python 文件中的所有变量和函数参数并根据样式规则替换它们?例如,给定一个函数myModule.py
def myFunc(Variable):
Tmp = sin(Variable)
return Tmp * 2
Run Code Online (Sandbox Code Playgroud)
是否有一个工具可以通过如下方式调用
> tool myModule.py --variable-begin-with-lowercase
产生下面的结果?
def myFunc(variable):
tmp = sin(variable)
return tmp * 2
Run Code Online (Sandbox Code Playgroud)
我想,该工具应该警告干扰现有变量的重命名。
You can use 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)
Run Code Online (Sandbox Code Playgroud)
Output:
def myFunc(variable):
tmp = sin(variable)
return tmp * 2
Run Code Online (Sandbox Code Playgroud)