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。有人能解释一下各种{
>>> 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
模块多一点的人能够提供一个更全面的答案
Load
上下文中的表达式正在计算其值Store
表示正在将表达式分配给(包括用作with
或for
目标的方式),而Del
表示正在删除表达式(使用del
)。这在Python 3.9 ^{Param
、AugLoad
和AugStore
可以安全地忽略。从Python3.7开始,它们从未出现在实际的AST中,而从3.9开始,它们就完全消失了,甚至在实现级别也是如此。在3.7中,AugLoad
和AugStore
有时出现在编译器内部创建的temporary objects中,但从未出现在实际的AST中。据我所知,Param
自从函数注释的引入迫使Python 3.0重新设计函数参数的AST表示以来,就没有被使用过相关问题 更多 >
编程相关推荐