Man*_*ngo 4 python operator-precedence augmented-assignment
看来这个问题只回答了Java,但我想知道它是如何在Python中运行的.这些都一样吗?
a += b / 2
Run Code Online (Sandbox Code Playgroud)
和
a += (b / 2)
Run Code Online (Sandbox Code Playgroud)
是的,那些是一样的.Python的扩充赋值不是表达式,它是一个语句,并且不在表达式优先级规则中起作用.+=不是运算符,而是扩展赋值语句语法的一部分.
因此,右侧的+=所有内容都是表达式,但+=本身并非如此,因此最终将始终处理赋值.
并且因为(扩充)赋值不是表达式,所以它也不能生成在周围表达式中使用的值.没有(a += b) / 2,这是一个语法错误,当然没有if (a += b / 2):或其他这样的恶作剧.
Run Code Online (Sandbox Code Playgroud)augmented_assignment_stmt ::= augtarget augop (expression_list | yield_expression) augtarget ::= identifier | attributeref | subscription | slicing augop ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**=" | ">>=" | "<<=" | "&=" | "^=" | "|="
所以它augop是语句语法的一部分,只有下面的部分是一个表达式(具体来说,是一个expression_list或yield_expression语法规则).
此外,解释显示:
增强赋值评估目标(与正常赋值语句不同,它不能是解包)和表达式列表,执行特定于两个操作数上的赋值类型的二进制运算,并将结果赋给原始目标.目标仅评估一次.
因此augtarget首先处理该部分,然后处理表达式列表(或yield表达式),然后增强赋值应用运算符并分配结果.
此外,表达式引用文档确实包含一个优先级表,但该表不包括赋值(扩充或其他),只是因为赋值不是表达式而是语句.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |