Python之六大标准数据类型强制转换关系

    技术2022-07-11  87

    六大标准数据类型强制转换关系

    强制类型转换 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))
    Processed: 0.010, SQL: 9