按照类型分类:
数值:整型、浮点型、布尔型、复数
序列:列表、字符串、字节
映射:字典
集合:集合
按照可修改性分类:
可修改类型 :列表,字典,集合
不可修改类型:数值,字符串,元组
一、 数值类型
1. 整数类型
(1) 定义: 变量名 = 整数类型eg. a = 12
(2) 取值范围
在python2.x中,区分int和long,超过32位使用long存储
在python3.x中,不分整型和长整型,自动判断
根据长度自动决定类型
整型最大值取决于操作系统
import sys
print(sys.maxsize) #即二的六十四次方减一
(3) 进制手工转换(二进制八进制十进制十六进制)> print(),等默认使用十进制
a. 定义前缀
0b --- 二进制 --- bin()0o --- 八进制 --- oct()
--- 十进制 --- int()
0x --- 十六进制 --- hex()
b. 十进制和其他进制 ---- 下除取余法
c. 其他进制转十进制 ---- 乘幂法
d. 二进制转八进制 ---- 三位一转,也可以反向原理实现八进制转二进制
(4) 机器进制转换---bin,oct, int, hex 通过内置函数转化成特定类型
> 注意:bin,oct,hex会返回字符串,int返回整型
> int默认十进制,如果逗号后面加数字n(缺省值),代表前面的数为n进制
print(int(123,16))
(5) int(value, 缺省(进制)= 10)函数的作用:
a. 浮点数向零取整 --- int(3.14)b. 字符串转十进制 --- int('FZ', 36) > 575
二、 布尔类型(True / False) --- 本质上属数值类型
应用场合: 返回值或者作为逻辑运算符两侧的值
三、 浮点数
小数,浮点类型只支持十进制1. 定义
变量名 = 小数# 浮点类型首位可以是0,但是整型不可以
2. 科学计数法
a = 2e20
##### 该值超过存储值最大值
3. 取值范围:有界限
通过sys.float_info.max表示最大值4. 特殊浮点数
--- 无穷大的四则运算, 若无法确定运算结果仍为无穷大, 那么运算结果就是一个NaN
a. inf --- 无穷大、无穷小b. NaN --- 不确定量 #自己和自己也不相等
print(float('NaN'))
判断方法:
x = float('nan')
import math
math.isnan(x)
5. 浮点类型的不精确性
--- 有的小数是无限小数,在计算机中近似存储
print(10/3) --- 0.333333333333333333335 # 无限小数省略存储a. 小数转成二进制小数(规则,小数位*2,得到结果取整数,一直取,从上到下)
0.1 *2 ----- 0
0.2 *2 ----- 0
0.4 *2 ----- 0
0.8 *2 ----- 1
0.6 *2 ----- 1
0.2 *2 ----- 0
0.4 *2 ----- 0
0.8 *2 ----- 1
0.6 *2 ----- 1 ...
b. 尽量避免数量级相差很大的浮点数之间进行计算
f1 = 5e20
f2 = 1
print(f1+f2) >>> 5e20
> 原因: 计算存储位数有限 ##########
c. 尽量避免等值判断
f1 = 0.1
f2 = 0.2
print(2*f1 == f2)
print(f1+f2) >>> 0.30000000000000004
e. 浮点数不精确性的解决方法 ---- 使用decimal模块下Decimal类(l存储位数默认为28位,实际也是一个省略值)
decimal.Decimal(value)代表真实值(28位默认)
>>> import decimal
>>> a = decimal.Decimal(1/3)
>>> a
Decimal('0.333333333333333314829616256247390992939472198486328125')
>>> a == 0.333333333333333314829616256247390992939472198486328125
True
> 解决办法(使用字符串): x = decimal.Decimal('0.1'+'0.2')> 显示特殊浮点型的原型
print(decimal.Decimal('inf')+1) #>>> Infinity 和无穷大类型运算仍然是浮点数
print(decimal.Decimal('inf')+1) #>>> 报错,这个类不能和浮点型运算
print(decimal.Decimal('nan')) #>>> NaN
print(decimal.Decimal('inf')) #>>> Infinity
d. 修改有效位数 --- 通过getcontext()修改的有效位数,修改运算结果的位数,Decimal类默认位数为28位。 ----四舍五入
decimal.getcontext().prec = 10
四、 复数类型
x = 1- 2j实部和虚部都是浮点类型
五、四种类型之间的转换
int(value): 默认为int() = 0,向零取整,---# 复数不能转整型float(value): 默认为float() = 0.0,转换成浮点数 ---# 复数不能转换成浮点型
complex(value): 默认值complex = 0j,什么都可以转
bool(value): 默认值bool()=False,什么都可以转,
> 两种类型做运算,取等级高类型 (复数> 浮点> 整型> 布尔)