目录
1. 第四章 运算符与表达式
本章的主题是 Python 语言的内建运算符及表达式求值的优先级。
1.1. 数值操作
所有数值类型都提供下列运算:
运算 描述 x + y 加 x - y 减 x * y 乘 x / y 常规除 x // y 地板除 x ** y 乘方 (xy ) x % y 取模 (x mod y ) -x 改变操作数的符号位 +x 什么也不做 ~x ~x=-(x+1)
关于常规除 / 与地板除 //: 地板除在任何时候都会将小数部分舍为0,而常规除的行为依操作数的类型而有不同。 常规除 / : 整数除以整数时 / 与 // 除完全相同,商都会被舍去小数部分而返回一个整数。如7 / 4 的结果是 1,而不是1.75; 如果有一个操作数为浮点数,情形就不同了: 对于 / ,会返回一个双精度浮点数 对于 //,也会返回一个双精度浮点数,只不过小数部分被舍弃
取模操作返回 x/y 的余数,如7 % 4是3。对于浮点数,取模操作返回的是x - int(x / y ) * y。 对于复数,取模操作返回x - int((x / y ).real ) * y。
下列列出的位运算符只能用于整数或长整数:
操作 描述 x x >> y 右移 x & y 按位与 x | y 按位或 x ^ y 按位异或 (exclusive or) ~x 按位翻转
这些都是相当原始的运算,操作的是操作数的每一个位。所有的操作数都假定是以二进制补码形式表示。对于长整数,按位运算符假定符号位可以被无限地向左扩展。
除了这些以外,下边这些内建函数支持所有的数值类型:
函数 描述 abs(x ) 绝对值 divmod(x ,y ) 返回 (int(x / y ), x % y ) pow(x ,y [,modulo ]) 返回 (x ** y ) x % modulo round(x ,[n]) 四舍五入,n为小数点位数
abs()函数返回一个数的绝对值。divmod()函数返回一个包含商和余数的元组。pow()函数可以用于代替 ** 运算,但它还支持三重取模运算(经常用于密码运算)。 round函数总是返回一个浮点数。Python的四舍五入规则不是银行家四舍五入规则,这一点请大家注意。
下列比较操作有标准的数学解释,返回一个布尔值True,或者False:
运算符 描述 x x > y 大于 x == y 等于 x != y 不等于(与相同) x >= y 大于等于 x
Python的比较运算可以连结在一起,如w
x z这个表达式也是合法的,(注意,这个表达式中 x 和 z 并没有比较操作)。不建议这样的写法,因为这会造成代码的阅读困难。
只可以对复数进行等于(==)及不等于(!=)比较,任何对复数进行其他比较的操作都会引发TypeError异常。
数值操作要求操作数必须是同一类型,若Python发现操作数类型不一致,就会自动进行类型的强制转换,转换规则如下:
1.如果操作数中有一个是复数,另一个也将被转换为复数 2.如果操作数中有一个是浮点数,另一个将被转换为浮点数 3.如果操作数中有一个是长整数数,另一个将被转换为长整数数 4.如果以上都不符合,则这两个数字必然都是整数,不需进行强制转换。
1.2. 序列运算
序列支持以下操作:
操作 描述 s + r 序列连接 s * n , n * s s的 n 次拷贝,n为整数 s % d 字符串格式化(仅字符串) s[i] 索引 s[i :j ] 切片 x in s , x not in s 从属关系 for x in s : 迭代 len(s) 长度 min(s) 最小元素 max(s) 最大元素
+ 运算符将两个相同类型的序列连结成一个。 s * n 运算符给出一个序列的 n 次浅拷贝。下边的例子可以帮助你理解这点: