这些甚至应该起作用吗?
是
这是疏忽吗?
没有
这是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语法中的一个。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)