强制类型转换 Number (int float complex bool)

var1 = 100
var2 = 3.9
var3 = True
var4 = 4-90j
var5 = "123"
var6 = "123abc"

int 强制转换为整型

可以转:int float bool 纯数字字符串
res = int(var2)     # 3
res = int(var3)     # True => 1 False => 0
res = int(var4)     # error 复数不能转换为整形
res = int(var5)     # 123
res = int(var6)     # error  不是纯数字
print(res , type(res))

float 强制转换为浮点型

可以转: int float bool 纯数字字符串
res = float(var1) 		# 100.0
res = float(var3) 		# False => 0.0 True => 1.0
res = float(var4) 		# error
res = float(var5)		# 123.0
print(res , type(res))

complex 强制转换为复数

可以转: int float bool 纯数字字符串 complex
res = complex(var1) 	# (100+0j)
res = complex(var2)     # (3.9+0j)
res = complex(var3) 	# False => 0j True => 1+0j
res = complex(var5) 	# 123+0j
print(res , type(res))

bool 强制转换为布尔型

可以转: bool类型可以转换一切数据
res = bool(var6) # True
res = bool(var4) # True

布尔类型为假的十种情况 (重中之重)

""" 0 , 0.0 , 0j , False , '' , [] , (),{},set() , None """
res = bool(0)
res = bool(0.0)
res = bool(False)
res = bool(0j)
res = bool('')
res = bool([])
res = bool(())
res = bool({})
res = bool(set())
res = bool(None)
print(res)

None 代表空的,什么也没有,一般用作变量的初始化

a = None
b = None

自动类型转换Number

精度上从小到大的顺序:bool => int => float => complex

默认在系统自动转换的时候,低精度向高精度转换.

bool + int
res = True + 15  	# 1 + 15 => 16

bool + float
res = True + 3.8 	# 1.0 + 3.8 = 4.8

bool + complex
res = True + 3-90j  # 1+0j + 3-90j => 4-90j

int + float
res = 4 + 4.1  		# 4.0+4.1 = 8.1

int + complex
res = 5 + 4-90j 	# 9-90j

float + complex
res = 4.3 + 5 - 3j  #4.3+5.0-3j = 9.3-3j

容器类型的强制转换

str list tuple set dict bool , str 可以转换所有的数据类型

var1 = "李文汇"
var2 = ["张永建","徐汇","张士宇"]
var3 = ("张永建","徐汇","张士宇")
var4 = {"张永建","徐汇","张士宇"}
var5 = {"风流倜傥,英俊潇洒,放荡不羁":"张永建","水性杨花":"徐汇","正义凛然,方方正正":"张士宇"}
var6 = 12345

强制转换成 str

可以转换所有的数据类型,就是单纯在原数据类型的两边套上引号就是字符串
res = str(var6)
res = str(var5)

# repr => 元字符串 r"e:sdf\sdf" 不转移,原型化输出,显示引号

res = repr(res)
print(res , type(res))

强制转换成 list

如果是字符串,把字符串中的每个元素拿出来,作为列表的新元素
如果是字典,保留所有字典的键
如果是其他数据,就是单纯的在原数据类型的两边换上中括号[]
lst = list(var1)       # ['李', '文', '汇']
lst = list(var3)       # ['张永建', '徐汇', '张士宇']
lst = list(var5)       # ['风流倜傥,英俊潇洒,放荡不羁', '水性杨花', '正义凛然,方方正正']
print(lst , type(lst))

强制转换成 set

如果是字符串,把字符串中的每个元素拿出来,作为集合的新元素  [无序,自动去重]
如果是字典,保留所有字典的键
如果是其他数据,就是单纯的在原数据类型的两边换上花括号{}
setvar = set(var1)    
setvar = set(var2)
setvar = set(var5)
print(setvar , type(setvar))

强制转换成 tuple

如果是字符串,把字符串中的每个元素拿出来,作为元组的新元素
如果是字典,保留所有字典的键
如果是其他数据,就是单纯的在原数据类型的两边换上圆括号()
tup = tuple(var5)      # ('风流倜傥,英俊潇洒,放荡不羁', '水性杨花', '正义凛然,方方正正')
print(tup , type(tup))

括号里面不写数据,默认返回一个假值;

float complex() bool() str() list() tuple() set() dict()
res = dict() 
print(res)

转换成字典

二级容器 列表 元组 集合 字典

二级列表
listvar = [1,2,3,[4,5,6]]

二级元组
tuplevar = (1,2,3,(4,5))

二级集合
setvar = {'a','b',(1,23)}

二级字典
dictvar = {  "a":1,"b":{"c":3}  }
四级容器
container = [1,2,3,4,(5,6,7,8,{"a":1,"b":2,"c":[1,2,"bingo"]})]

如何获取bingo字符串

res = container[-1]
print(res)     # (5, 6, 7, 8, {'a': 1, 'b': 2, 'c': [1, 2, 'bingo']})

res2 = res[-1]
print(res2)    # {'a': 1, 'b': 2, 'c': [1, 2, 'bingo']}

res3 = res2["c"]
print(res3)    # [1, 2, 'bingo']

res4 = res3[-1]
print(res4)    # ['bingo']

简化代码
res = container[-1][-1]["c"][-1]
print(res)

等长的二级容器

里面的元素是容器,并且容器里面的元素个数相同就是等长的二级容器

container = [(1,4,43),[11,7,10]]

dict 强转:需要等长的二级容器,并且容器里面的元素个数得是2个

外层是列表,内层是 列表/元组
container = [["a",1] , ("b",2)]

外层是元组,内层是列表/元组
container = (["c",1],("d",4))

外层是集合,内层是元组
container = {("f",10),('e',20)}
dictvar = dict(container)
print(dictvar , type(dictvar))  # {'e': 20, 'f': 10}

在里面放元组,什么情况都好使

例外情况 (不推荐)
集合无序,导致不符合原意(不推荐)
container = [{"a",1},{"b",2}]
dic = dict(container)
print(dic , type(dic))

字符串的长度必须是2位,有极大局限性(不推荐)
container = (["a",1],"c3")
# container = (["a",1],"c333") error
dic = dict(container)
print(dic , type(dic))