我正在尝试使用ast
Python 中的类。我想获取所有函数调用及其相应的参数。
我该如何实施?python.org 上的官方文档真的很模糊。
我也尝试实现visit_Name
and visit_Call
,但这给了我比调用的名称更多的东西。如果有一些文档说明哪些节点拥有哪些属性,那就太好了。例如,名称节点的 id 和呼叫节点的 func。
我正在尝试使用ast
Python 中的类。我想获取所有函数调用及其相应的参数。
我该如何实施?python.org 上的官方文档真的很模糊。
我也尝试实现visit_Name
and visit_Call
,但这给了我比调用的名称更多的东西。如果有一些文档说明哪些节点拥有哪些属性,那就太好了。例如,名称节点的 id 和呼叫节点的 func。
我不知道其他文档,但是通过学习示例可以学到很多东西,例如Alex Martelli 的这个。你可以从稍微修改它开始,这样:
import ast
class FuncVisit(ast.NodeVisitor):
def __init__(self):
self.calls = []
self.names = []
def generic_visit(self, node):
# Uncomment this to see the names of visited nodes
# print(type(node).__name__)
ast.NodeVisitor.generic_visit(self, node)
def visit_Name(self, node):
self.names.append(node.id)
def visit_Call(self, node):
self.names = []
ast.NodeVisitor.generic_visit(self, node)
self.calls.append(self.names)
self.names = []
def visit_keyword(self, node):
self.names.append(node.arg)
tree = ast.parse('''\
x = foo(a, b)
x += 1
bar(c=2)''')
v = FuncVisit()
v.visit(tree)
print(v.calls)
产量
[['foo', 'a', 'b'], ['bar', 'c']]