for循环名称列表表达式合法吗?

for循环名称列表表达式合法吗?,第1张

for循环名称列表表达式合法吗?

这些甚至应该起作用吗?

这是疏忽吗?

没有

这是PyPy也恰好实现的CPython的实现细节吗?

没有


如果可以分配给它,则可以将其用作for循环中的自由变量。

对于这样的问题,值得直接学习语法

for_stmt ::=  "for" target_list "in" expression_list ":" suite   ["else" ":" suite]

A

target_list
只是一堆
target

target_list     ::=  target ("," target)* [","]target          ::=  identifier          | "(" target_list ")"          | "[" [target_list] "]"          | attributeref          | subscription          | slicing          | "*" target

如果仔细观察,您会发现您给出的所有工作示例都不是反例。请注意,解析器中的错误并不是闻所未闻的,因此,如果您发现合法的语法异常,则可以提交票证-这些错误会很快得到解决。

您给出的最有趣的一对是

(True and obj.d)
(True and obj).d
,它们在逻辑上似乎相同,但解析方式不同:

>>> ast.dump(ast.parse('(True and obj.d)'), annotate_fields=False)"Module([Expr(BoolOp(And(), [Name('True', Load()), Attribute(Name('obj', Load()), 'd', Load())]))])">>> ast.dump(ast.parse('(True and obj).d'), annotate_fields=False)"Module([Expr(Attribute(BoolOp(And(), [Name('True', Load()), Name('obj', Load())]), 'd', Load()))])"

注意:

(True andobj).d
attributeref
语法中的一个。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5654906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存