数字(整数、浮点数、复数) #################################### Python 内置了三种不同的数字类型:整数,浮点数和复数。此外,布尔值属于整数的子类型。 整数具有无限的精度。浮点数通常使用 C 中的 double 来实现(宿主机上浮点数的精度和内部表示法可在 sys.float_info 中查看)。复数包含实部和虚部,分别以一个浮点数表示。要从一个复数 z 中提取这两个部分,可使用 z.real 和 z.imag。(标准库包含附加的数字类型,如表示有理数的 fractions.Fraction 以及以用户定制精度表示浮点数的 decimal.Decimal。) 数字是由数字字面值或内置函数与运算符的结果来创建的。不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上 'j' 或 'J' 会生成虚数(实部为零的复数),可以将其与整数或浮点数相加来得到具有实部和虚部的复数。 数字运算符 ************************************ Python 完全支持混合算术:当一个二元运算符用于不同数字类型的操作数时,具有“较窄”类型的操作数会被扩展为另一个操作数的类型,整数比浮点数更窄,浮点数又比复数更窄。混合类型数字之间的比较也使用相同的规则。 所有数字类型(复数除外)都支持下列运算(有关运算优先级,请参阅:运算符优先级): ==================== ==================== 运算符 描述 ==================== ==================== \+ 加 - 两个对象相加 \- 减 - 两个对象相减 \* 乘 - 两个对象相乘 / 除 - 两个对象相除 // 整除 - 向下取除数的整数 % 取模 - 返回除法的余数 -x x 取反 +x x 不变 \*\* 幂 abs(x) x 的绝对值或大小 int(x) 将 x 转换为整数 float(x) 将 x 转换为浮点数 complex(re, im) 一个带有实部 re 和虚部 im 的复数。im 默认为0。 c.conjugate() 复数 c 的共轭 divmod(x, y) (x // y, x % y) pow(x, y) x 的 y 次幂 ==================== ==================== :: >>> 7 + 4 11 >>> 7.0 + 4 # 整数扩展为浮点数计算 11.0 >>> 7 - 4 3 >>> 7 * 4 28 >>> 7 / 4 1.75 >>> 7 // 4 1 >>> 7 % 4 3 >>> -4 -4 >>> +4 4 >>> 4 ** 7 16384 >>> complex(7, 4) (7+4j) >>> divmod(7, 4) (1, 3) 整数按位运算符 ************************************ 按位运算只对整数有意义。计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作。 ==================== ==================== 运算 描述 ==================== ==================== \| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 ^ 按位异或运算符:当两对应的二进位相异时,结果为1 & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 << 左移动运算符:运算数的各二进位全部左移若干位,高位丢弃,低位补0。 >> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位 ~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 ==================== ==================== :: # 将整数转换成二进制格式 >>> format(60, 'b') '111100' >>> format(13, 'b') '1101' >>> 60 | 13 61 >>> format(61, 'b') '111101' >>> 60 ^ 13 49 >>> format(49, 'b') '110001' >>> 60 & 13 12 >>> format(12, 'b') '1100' >>> 60 << 2 240 >>> format(240, 'b') '11110000' >>> 60 >> 2 15 >>> format(15, 'b') '1111' >>> ~60 -61 >>> format(-61, 'b') '-111101' >>> ~13 -14 >>> format(-14, 'b') '-1110' 运算符优先级 ************************************ 下表对 Python 中运算符的优先顺序进行了总结,从最低优先级(最后绑定)到最高优先级(最先绑定)。 - 相同单元格内的运算符具有相同优先级。 - 除非句法显式地给出,否则运算符均指二元运算。 - 相同单元格内的运算符均从左至右分组(除了幂运算是从右至左分组)。 - 比较、成员检测和标识号检测均为相同优先级,并具有从左至右串连特性。 +------------------------------+----------------------------------------+ |运算符 |描述 | +==============================+========================================+ |- (expressions...), |- 加圆括号的表达式, | |- [expressions...], |- 列表显示,字典显示,集合显示 | |- {key: value...}, | | |- {expressions...} |- (最高优先级) | +------------------------------+----------------------------------------+ |- x[index] | | |- x[index:index] |抽取,切片,调用,属性引用 | |- x(arguments...) | | |- x.attribute | | +------------------------------+----------------------------------------+ |await x |await 表达式 | +------------------------------+----------------------------------------+ |\*\* |乘方 6 | +------------------------------+----------------------------------------+ |+x, -x, ~x |正,负,按位非 NOT | +------------------------------+----------------------------------------+ |\*, @, /, //, % |乘,矩阵乘,除,整除,取余 5 | +------------------------------+----------------------------------------+ |+, - |加和减 | +------------------------------+----------------------------------------+ |<<, >> |移位 | +------------------------------+----------------------------------------+ |& |按位与 AND | +------------------------------+----------------------------------------+ |^ |按位异或 XOR | +------------------------------+----------------------------------------+ |\| |按位或 OR | +------------------------------+----------------------------------------+ |- in, not in | | |- is, is not, |比较运算,包括成员检测和标识号检测 | |- <, <=, >, >=, | | |- !=, == | | +------------------------------+----------------------------------------+ |not x |布尔逻辑非 NOT | +------------------------------+----------------------------------------+ |and |布尔逻辑与 AND | +------------------------------+----------------------------------------+ |or |布尔逻辑或 OR | +------------------------------+----------------------------------------+ |if -- else |条件表达式 | +------------------------------+----------------------------------------+ |lambda |lambda 表达式 | +------------------------------+----------------------------------------+ |= |赋值表达式 | +------------------------------+----------------------------------------+