您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

扩展赋值的Python运算符优先级

扩展赋值的Python运算符优先级

是的,这些都是一样的。Python的增强分配 不是表达式 ,它是语句,并且不在表达式优先级规则中发挥作用。+=不是运算符,而是扩展的赋值语句语法的一部分。

因此 _,右侧的+=_所有内容都是表达式,但+=本身不是,因此赋值将始终在最后处理。

而且,由于(增强的)赋值不是表达式,因此它也不能产生用于周围表达式的值。没有(a += b) / 2,这是语法错误,当然也没有if (a += b / 2):或其他类似的恶作剧。

请参阅有关扩充赋值语句参考文档,该文档指出语法为:

augmented_assignment_stmt ::=  augtarget augop (expression_list |

yield_expression) augtarget ::= identifier | attributeref | subscription | slicing augop ::= “+=” | “-=” | “=” | “@=” | “/=” | “//=” | “%=” | “*=” | “>>=” | “<<=” | “&=” | “^=” | “|=”

因此,这augop是语句语法的一部分,只有后面的部分是表达式(具体来说是aexpression_listyield_expression语法规则)。

此外,说明显示

扩充赋值评估目标(与普通赋值语句不同,不能解包)和表达式列表,对两个操作数执行特定于赋值类型的二进制运算,并将结果赋值给原始目标。该目标仅评估一次。

因此,augtarget首先处理零件,然后处理表达式列表(或yield表达式),然后扩展的分配应用运算符并分配回结果。

此外,表达式参考文档的确包含一个优先级表,但是该表不包含赋值(增强的或其他形式的赋值),只是因为赋值不是表达式而是语句。

python 2022/1/1 18:41:34 有273人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶