是否有一个ast python3文档? (至少对于语法)

时间:2013-05-03 14:33:31

标签: python python-3.x documentation abstract-syntax-tree

我正在尝试使用Python中的ast类。我想获取所有函数调用及其相应的参数。

我该如何实施? python.org上的官方文档非常模糊。

我也尝试过实施visit_Namevisit_Call,但这给了我更多的呼叫名称。如果有一些文档属于哪些节点拥有,那将会很好。例如,Name-nodes的id和Call-nodes的func。

1 个答案:

答案 0 :(得分:2)

我知道没有其他文档,但是通过学习Alex Martelli的例子,例如this one,可以学到很多东西。你可以稍微修改它,这样:

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']]