六大标准数据类型强制转换关系
强制类型转换 Number(int float bool complex)(1) 强制转换成整型(2) 强制转换成浮点型(3) 强制转换成bool(4) 强制转换成复数
自动类型转换 Number (int float bool complex)(1) bool + int float complex(2) int + float complex(3) float + complex
容器类型的强制转换( str list tuple set dict)(1) str (容器 / Number 都可以转换)(2) list : 强制转换成列表(3) tuple : 强制转换成元组(4) set : 强制转换成集合(5) 去掉列表中重复的数据
二级容器 (list tuple set dict )等长的二级容器: 里面的元素都是容器类型,且容器里面的元素个数相同
dict : 强制转换成字典(1) 外层是列表或者元组或集合, 里面的容器是元组或者列表(推荐)(2) 如果里面是集合, 语法上允许,但是有局限性(不推荐)
变量的缓存机制(仅针对python3.6 版本)对于Number(int float bool complex)(1). 对于整型而言 -5 ~ 正无穷范围内的相同值, id 一致(2). 对于浮点数而言, 非负数范围内的相同值, id一致(3).布尔值而言,值相同情况下,id一致(4).复数在 实数+虚数 这样的结构中永不相同(只有虚数的情况例外)
对于容器数据类型(5).字符串 和 空元组 相同的情况下,地址相同(6).列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]
强制类型转换 Number(int float bool complex)
var1 = 55
var2 = 6.56
var3 = False
var4 = 6-4j
var5 = '123456'
var6 = 'abc123456'
(1) 强制转换成整型
'''
int
float (不会四舍五入) ==>可以转换
bool
纯数字字符串
'''
res = int(var1) # 55
print(res, type(res))
res = int(var2) # 6
print(res, type(res))
res = int(var3) # 0
print(res, type(res))
# res = int(var4) # ERROR
# print(res, type(res))
res = int(var5) # 123456
print(res, type(res))
# res = int(var6) # ERROR
# print(res, type(res))
(2) 强制转换成浮点型
'''
int
float .0
bool ==> 可以转换
纯数字字符串
'''
res = float(var1) # 55.0
print(res, type(res))
res = float(var2) # 6.56
print(res, type(res))
res = float(var3) # 0.0
print(res, type(res))
# res = float(var4) # ERROR
# print(res, type(res))
res = float(var5) # 123456.0
print(res, type(res))
# res = float(var6) # ERROR
# print(res, type(res))
(3) 强制转换成bool
'''
都可以转换,两个值True False
bool类型为假的十种情况:
0 , 0.0 , 0j , False , [] , '' , {} , set() , () , None
'''
res = bool(var1) # 1
print(res, type(res))
res = bool(var2) # 1
print(res, type(res))
res = bool(var3) # 0
print(res, type(res))
res = bool(var4) # 1
print(res, type(res))
res = bool(var5) # 1
print(res, type(res))
res = bool(var6) # 1
print(res, type(res))
(4) 强制转换成复数
'''
int
float
bool +0j
complex ==> 可以转换
纯数字字符串
'''
res = complex(var1) # 55 + 0j
print(res, type(res))
res = complex(var2) # 6.56 + 0j
print(res, type(res))
res = complex(var3) # 0 + 0j
print(res, type(res))
res = complex(var4) # 6 - 4j
print(res, type(res))
res = complex(var5) # 123456 + 0j
print(res, type(res))
# res = complex(var6) # ERROR
# print(res, type(res))
'''
总结:
int() float() bool() complex()
默认创建一个该数据类型的值
'''
自动类型转换 Number (int float bool complex)
'''
精度从低向高进行转换 :
bool => int => float = > complex
自动类型转换,默认从低精度向高精度进行转换
'''
(1) bool + int float complex
res = True + 2 # 1 + 2
print(res)
res = True + 2.3 # 1 + 2.3
print(res)
res = True + 2+5j # 1+0j + 2+5j
print(res)
(2) int + float complex
res = 1 + 3.3 # 1.0 + 3.3
print(res)
res = 2 + 5+6j # 2+0j + 5+6j
print(res)
(3) float + complex
res = 2.3 + 5+6j # 2.3+0j + 5+6j
print(res)
容器类型的强制转换( str list tuple set dict)
strvar = '字符串'
listvar = ['列表1', '列表2']
tuplevar = ('元组1', '元组2')
setvar = {'集合1', '集合2'}
dictvar = {'zd':'字典1', 'zd2':'字典2'} # 推荐使用变量命名字符串作为字典的键
intvar = 562
(1) str (容器 / Number 都可以转换)
''' 强制转成字符串, 无非就是在原有的数据的基础上两边套上引号'''
res = str(listvar)
print(res, type(res))
res = str(intvar)
print(res, type(res))
(2) list : 强制转换成列表
'''
1. 如果是字符串, 会把每一个字符单独的作为列表中的元素
2. 如果是字典, 只保留键, 形成列表
3. 如果是其他容器, 只是单纯的在原有的数据上换上[]
'''
res = list(strvar)
print(res, type(res))
res = list(tuplevar)
print(res, type(res))
res = list(setvar)
print(res, type(res))
res = list(dictvar)
print(res, type(res))
(3) tuple : 强制转换成元组
'''
1. 如果是字符串, 会把每一个字符单独的作为元组中的元素
2. 如果是字典, 只保留键, 形成新的元组
3. 如果是其他容器, 只是单纯的在原有的数据上换上()
'''
res = tuple(strvar)
print(res, type(res))
res = tuple(listvar)
print(res, type(res))
res = tuple(setvar)
print(res, type(res))
res = tuple(dictvar)
print(res, type(res))
(4) set : 强制转换成集合
'''
1. 如果是字符串, 会把每一个字符单独的作为集合中的元素(无序,自动去重)
2. 如果是字典, 只保留键, 形成新的集合
3. 如果是其他容器, 只是单纯的在原有的数据上换上{}
'''
res = set(strvar)
print(res, type(res))
res = set(listvar)
print(res, type(listvar))
res = set(dictvar)
print(res, type(res))
(5) 去掉列表中重复的数据
listvar1 = [1, 2, 2, 2, 3, 4, 5]
res = list(set(listvar1))
print(res)
二级容器 (list tuple set dict )
# 二级列表
listvar = [1, 2, [3, 4]]
# 二级元组
tuplevar = (1 ,2, (3, 4))
# 二级集合
setvar = {1, 2, (3, 4)}
# 二级字典
dictvar = {'a':1, 'b':{'c':3, 'd':4}}
res = dictvar['b'] #获取这四个元素
print(res)
res1 = res['d']
print(res1)
# 简写
res = dictvar['b']['d']
print(res)
# 五级容器
container = [1, 2, 3, 4,(5, 6, 7, {'a':8,'b':{'c':9, 'd':[10,11]}})]
# 获取 11
res = container[-1][-1]['b']['d'][-1]
print(res)
等长的二级容器: 里面的元素都是容器类型,且容器里面的元素个数相同
list1 = [(11, 12, 13),(1, 2, 3)]
list2 = [(1, 2), (3, 4)]
dict : 强制转换成字典
'''必须是等长的二级容器,且里面的元素是两个'''
(1) 外层是列表或者元组或集合, 里面的容器是元组或者列表(推荐)
listvar = [("a",1),["b",2]]
tuplevar = (("c",3),["d",4],)
res = dict(listvar)
print(res)
res = dict(tuplevar)
print(res)
(2) 如果里面是集合, 语法上允许,但是有局限性(不推荐)
listvar = [{"a",1},{"b",2}] # 因为集合无序,不符合定义的本意,不推荐使用
print(dict(listvar))
### (3) 如果使用字符串,语法上正确,但是有局限性(不推荐)
listvar = [("a",1),"b2"] # 字符串长度只能2个
# lst = [("a",1),"b23"] error
print(dict(listvar))
变量的缓存机制(仅针对python3.6 版本)
'''
3.7 3.8 中, 只要两个值相同,就只开辟一个空间
'''
对于Number(int float bool complex)
(1). 对于整型而言 -5 ~ 正无穷范围内的相同值, id 一致
var1 = -1
var2 = -1
var3 = -8
var4 = -8
var5 = var6 = -100 # 相同地址
print(id(var1), id(var2))
print(id(var3), id(var4))
(2). 对于浮点数而言, 非负数范围内的相同值, id一致
var1 = -5.76
var2 = -5.76
print(id(var1), id(var2))
(3).布尔值而言,值相同情况下,id一致
var1 = True
var2 = False
print(id(var1), id(var2))
(4).复数在 实数+虚数 这样的结构中永不相同(只有虚数的情况例外)
var1 = 3+4j
var2 = 3+4j
var3 = 90j
var4 = 90j
print(id(var1), id(var2))
print(id(var3), id(var4))
对于容器数据类型
(5).字符串 和 空元组 相同的情况下,地址相同
var1 = "你"
var2 = "你"
var3 = ()
var4 = ()
print(id(var1), id(var2))
print(id(var3), id(var4))
(6).列表,元组,字典,集合无论什么情况 id标识都不同 [空元组例外]
var1 = (1,2,3)
var2 = (1,2,3)
print(id(var1), id(var2))