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

扩展赋值的Python运算符优先级,第1张

扩展赋值的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
是语句语法的一部分,只有后面的部分是表达式(具体来说是a
expression_list
yield_expression
语法规则)。

此外,说明显示:

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

因此,

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

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



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

原文地址:https://54852.com/zaji/5674715.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存