我正在尝试使用 Python 3 中的ast 模块来解析一些 Python 代码。现在我只编写一个简单的节点访问者来输出原始代码。
我很难将 AST 的某些节点转换为实际代码。
关于http://docs.python.org/3.2/library/ast.html#abstract-grammar的语法,我不明白expr? returns
应该是什么
FunctionDef(identifier name, arguments args,
stmt* body, expr* decorator_list, expr? returns)
查看完整的 Python 语法 ( http://docs.python.org/3.2/reference/grammar.html ) 并没有帮助我理解可选元素可能是什么。
同样对于函数(或 lambda 函数)声明的参数:
arguments = (arg* args, identifier? vararg, expr? varargannotation,
arg* kwonlyargs, identifier? kwarg,
expr? kwargannotation, expr* defaults,
expr* kw_defaults)
我可以识别:
arg* args
和expr* defaults
:“基本”参数及其默认值identifier? vararg
andexpr? varargannotation
: 用于捕获可变数量的参数(+注解),例如def f(first, *others : 'annotation'):
identifier? kwarg
和expr? kwargannotation
: 命名参数也是一样的
但我不知道是什么arg* kwonlyargs
和expr* kw_defaults
我正在寻找一些将使用这三个功能的示例代码,以便我可以理解它们的含义/用途。
谢谢。