知识点

运算符与表达式分组

定义

优先级决定不同运算符的分组,结合性决定同一级运算符如何分组。括号显式指定分组;分组规则与操作数实际求值顺序是不同的问题,需要分别遵守语言规则。

对照

同一段运算在两种语言里的分组与结果并不相同,下面几处是考试和实际改写时最容易出错的地方。

方面CPython
按位运算与比较&、^、| 低于 == 和关系运算&、^、| 高于比较运算符
条件表达式?: 三目运算符x if c else y
逗号逗号运算符,值取最后一个表达式逗号构造元组
赋值赋值是表达式,可嵌套、可出现在条件里赋值是语句;:= 只能写在允许的位置
整数除法/ 向零截断,-7 / 2得 -3// 向下取整,-7 // 2得 -4
幂没有 **,用pow()** 右结合,且高于一元负号
逻辑运算的结果&&、|| 返回0或1返回参与运算的操作数本身

位运算与比较

C的a & b == c实际是a & (b == c),而Python的a & b == c是 (a & b) == c。迁移代码时不能只改语法,要按语义补括号。

赋值表达式

C的赋值是表达式,所以a = b = c与if (a = b) 都能编译,赋值还可以写在for的更新部分和函数实参里。Python的 = 是语句,链式赋值a = b = c只是把同一个对象依次绑定,不是表达式的嵌套;需要表达式时用 :=,但它能出现的位置受限制。

整数除法与取模

-7 / 2在C中向零截断,得 -3,余数 -7 % 2为 -1;Python的 -7 // 2向下取整,得 -4,余数 -7 % 2为1。两种语言对“商”的定义不同,负数参与时结果必然不同。

探索

相同表达式在C和Python中怎样分组?

比较位与运算和相等比较的优先级。

正在准备演示…