【发布时间】:2021-01-14 23:22:48
【问题描述】:
Python AST 表示中的ctx 参数是什么?例如:
>>> print(ast.dump(ast.parse('-a')))
Module(body=[Expr(value=UnaryOp(op=USub(), operand=Name(id='a', ctx=Load())))])
换句话说,ctx=Load() 是什么意思或做什么?我能从文档中看到的唯一信息是 ctx 可能是以下之一:
expr_context = Load | Store | Del | AugLoad | AugStore | Param
https://docs.python.org/3.7/library/ast.html。有人可以解释各种expr_context 以及它们的作用吗?我想 lhs 和 rhs 是存储/加载:
>>> print(ast.dump(ast.parse('b=-a')))
Module(body=[Assign(targets=[Name(id='b', ctx=Store())], value=UnaryOp(op=USub(), operand=Name(id='a', ctx=Load())))])
但除此之外,还有哪些其他选择?
更新:另外,是的,还有另一个与此类似的问题,Python AST: several semantics unclear, e.g. expr_context,但接受的答案以"After some more testing and guessing:..." 开头,并且在细节上非常简单(至少可以说)。我希望真正了解ast 模块的人可以提供更全面的答案。
【问题讨论】:
-
@MikeScotty 这很简单——即使是回答者也说他知道的不多,而且需要大量的猜测和检查。希望我们能找到对其他人更有用的东西?您是否阅读了接受的答案?
-
请注意,不同 Python 版本的上下文不同。 Python 3.9 文档仅列出 Load、Store 和 Del。
-
@user2357112supportsMonica 哇哦,这三个更直观,更容易理解......
-
3.9 文档也有 actual documentation 用于加载、存储和删除。
-
@user2357112supportsMonica 谢谢! 3.9 也有很棒的文档,在那之前它很糟糕。
标签: python python-3.x abstract-syntax-tree python-internals