gpt4 book ai didi

python - 在 Python 的 ast 中理解 ctx

转载 作者:行者123 更新时间:2023-12-04 03:42:28 25 4
gpt4 key购买 nike

什么是ctx Python AST 表示中的参数?例如:

>>> 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模块多一点可以提供更彻底的答案。

最佳答案

Load 中的表达式上下文正在计算其值。 Store表示正在分配一个表达式(包括用作 withfor 目标的方式)和 Del表示正在删除表达式(使用 del )。这在 Python 3.9 ast docs 中有描述。 ,这比 3.7 文档要好得多。Param , AugLoad , 和 AugStore可以安全地忽略。从 Python 3.7 开始,它们从未出现在实际的 AST 中,而从 3.9 开始,它们完全消失了,即使在实现级别也是如此。在 3.7 中,AugLoadAugStore有时出现在temporary objects由编译器在内部创建,但从未在实际的 AST 中创建。据我所知,Param自从引入函数注释强制重新设计 Python 3.0 中函数参数的 AST 表示后,就再也没有使用过。

关于python - 在 Python 的 ast 中理解 ctx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65728345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com