在Python中数字并不是真的只是一种对象类型,而是一组相似类型的分类.
Python 数值类型工具包括
- 整数和浮点对象
- 复数对象
- 小数:固定精度对象
- 分数:有理数对象
- 集合:带有数值运算的集合体
- 布尔值: 真和假
- 内置函数和模块:round,math, random 等
- 表达式:无限制整数精度,位运算,十六进制,八进制和二进制格式
- 第三方扩展:向量,库,可视化,作图等
数值字面量
- Python中数值字面量和构造函数
字面量 | 解释 |
---|---|
1234, -24, 999999999 | 整数(无大小限制) |
1.23, 1., 3.14e-10, 4E210, 4.0e+210 | 浮点数 |
0o177, 0x9ff, 0b101010 | 八进制,十六进制,二进制字面量 |
3+4j, 3.0+4.0j, 4J | 复数字面量 |
set('spam'), {1, 2, 3, 4} | 集合的构造形式 |
Decimal('1.0'), Fraction(1, 3) | 小数和分数扩展类型 |
bool(X), True, False | 布尔类型和字面量 |
- 整数和浮点字面量
- 整数写成十进制数字串.
- 浮点数带有一个小数点,也可使用科学计数法加上e或E作为标志.
如果编写一个带有小数点或幂的数字,那么Python将它创建为一个浮点数对象,并且这个对象在表达式中时,将启用浮点数(而不是整数)的运算法则. - 十六进制,八进制,二进制字面量
- 十六进制(16为基数):0x开头,后接0-9和A-F,大小写均可.如 0x9ff, 0X9FF.
- 八进制(8为基数):0o开头,后接0-7, 如:0o177, 0O177.
- 二进制(2为基数): 0b开头,后接0-1, 如:0b1010101, 0B101010.
- 复数
Python中复数字面量写成实部+虚部的形式,虚部是以J或者j结尾.如: 3+4j. - 其他数值类型
Python表达式运算符
表达式式处理数字的基本工具,表达式的定义是:数字(或其他对象)与运算符相结合,并被Python在执行时计算为一个值.
Python中所有的运算符表达式
运算符 | 描述 |
---|---|
yield x | 生成器函数send协议 |
lambda args: expression | 创建匿名函数 |
x if y else z | 三元选择表达式(仅当y为真时,x才会被计算) |
x or y | 逻辑或(仅当x为假时,y才会被计算) |
x and y | 逻辑与(仅当x为真时,y才会被计算) |
not x | 逻辑非 |
x in y, x not in y | 成员关系(可迭代对象,集合) |
x is y, x not is y | 对象同一性测试 |
x < y, x <= y, x > y, x >= y | 大小对比,集合的子集和超集 |
x == y, x != y | 等价性运算符 |
x | y | 按位或,集合并集 |
x ^ y | 按位异或,集合对称查集 |
x & y | 按位与,集合交集 |
x << y, x >> y | 将x左移或右移y位 |
x + y | 加法,拼接 |
x - y | 减法,集合差集 |
x * y | 乘法,重复 |
x % y | 求余,格式化 |
x / y, x // y | 真除法,向下取整 |
-x, +y | 取负,取整 |
~x | 按位非(取反码) |
x ** y | 幂运算 |
x[i] | 索引(序列,映射等) |
x[i:j:k] | 分片 |
x(...) | 调用(函数,方法,类,其他可调用对象) |
x.attr | 属性引用 |
(...) | 元组,表达式,生成器表达式 |
[...] | 列表,列表推导 |
{...} | 字典,集合,集合与字典推导 |
该图中运算符从上到下,优先级逐渐升高
- 混合运算遵循运算符优先级.如:A * B + C * D,先计算A * B和C * D,其次计算加法
- 括号分组表达式,优先于其他运算符.如:(x + y) * z,先计算括号中的表达式,再计算之外的表达式
- 混合类型向上转型 一个整数和一个浮点数相加,其结果为浮点数,如:4 + 3.14,表达式的值为7.14, 即在混合类型表达式中,Python首先将被操作的对象转换成其中最发复杂的操作数的类型,然后再对相同类型的操作数进行数学运算.
数字的实际应用
变量与基础表达式
- 变量在第一次赋值时被创建
- 变量在表达式中使用时,会被替换成它们的值
- 变量在表达式中使用前,必须已被赋值
- 变量引用对象,而且从不需要事先申明
例如:
>>> a =3
>>> b = 4
>>> a + 1, a - 1
(4, 2)
数值的显示格式 使用不同的显示方式,相同数值其显示效果不同,如:
>>> num = 1 / 3.0
>>> num
0.3333333333333333
>>> '%e' % num
'3.333333e-01'
普通比较与链式比较
- 普通比较:即为普通编程中的比较方式,如 比较a大于b且a小于c时,普通比较的表达式为:
>>> a > b and a < c
- 链式比较:该比较更接近与数学表达式,如比较a大于b且a小于c时,其表达式为:
>>> b < a < c
除法:经典除法,向下取整除法和真除法
- 经典除法:即为普通编程中使用的除法,当除数和被除数都为整数时,其商向下去掉小数部分,如
>>> 5 / 2
2
当除数和被除数其中任意一个为浮点数时,其商保留全部位数,如:
>>> 5 / 2.0
2.5
- 向下取整除法:该操作不考虑操作对象类型,总是省略结果的小数部分,如
>>> 5 // 2
2
>>> 5 // 2.0
2.0
- 真除法:如数学中的除法一致,不论操作对象类型是什么,总是保留其全部值,如
>>> 5 / 2
2.5
>>> 5 / 2.0
2.5
在python3.x 中只支持真除法(/)和向下取整除法
整数精度问题
在python3.x中整数支持无限制大小(有足够的内存)
复数
十六进制,八进制,二进制:字面量转换
- 八进制表示方法及十进制转换八进制工具
>>> 0o1, 0o20, 0o377
(1, 16, 255)
>>> oct(255)
'0o377'
- 十六进制表示方法及十进制转换十六进制工具
>>> 0x01, 0x10, 0xFF
(1, 16, 255)
>>> hex(255)
'0xFF'
- 二进制表示方法及十进制转换二进制工具
>>> 0b1, 0b10000, 0b11111111
(1, 16, 255)
>>> bin(255)
'0b11111111'
按位操作