python-数据类型的转换_变量的缓存机制

2023年7月9日13:07:34

python 的数据类型转换

1. Number 数字类型的强制类型转换

# 我们先定义几个数字类型的变量
			var1 = 24
			var2 = 3.14
			var3 = True
			var4 = 5-8j
			var5 = "4399"
			var6 = "abcf1234"
			
# 1.int 强制转换成整型
			res = int(var2) # 24
			res = int(var3) # False => 0 True => 1
			# res = int(var4) error
			res = int(var5) # 4399
			# res = int(var6) error
			print(res , type(res))
			
# 2.float 强制转换成浮点型
			res = float(var1) # 24.0
			res = float(var3) # True => 1.0 False => 0.0
			res = float(var5) # 4399.0
			print(res , type(res))
			
# 3.complex 强制转换成复数
			res = complex(var1) # 24 + 0j
			res = complex(var2) # 3.14 + 0j
			res = complex(var3) # False => 0j True => 1+0j
			res = complex(var5) # 4399 + 0j
			# res = complex(var6) error
			print(res , type(res))
			
# 4.bool 强制转换成布尔型
	"""
	bool类型为假的十种情况
	0 , 0.0 , 0j , False , '' , [] , () , set() , {} , None
	"""
	# None 是python的关键字,代表空的,什么也没有,一般用来做初始化操作, eg. a1 = None , b1 = None
			res = bool(None)	
			print(res , type(res))
			
	"""
	总结:
		int() float() bool() complex()
		默认创建一个该数据类型的值
		res = int() 
		res = float()
		res = bool()
		res = complex()
		print(res)
	"""

2. Number 数字类型的自动类型转换

转换规则 => 默认精度从低到高进行转换: bool -> int -> float -> complex

# 1.bool + int
            res =True + 100 # 1 + 100
            print(res)
		
# 2.bool + float
            res = True + 3.14 # 1.0 + 3.14
            print(res)

# 3.bool + complex
            res = False + 5-2j # 0j + 5-2j
            res = True + 5-2j  # 1+0j + 5-2j
            print(res)

# 4.int + float
            res = 5 + 3.14 # 5.0 + 3.14
            print(res)
		
# 5.int + complex
            res = 20 + 5-2j # 20+0j + 5-2j
            print(res)
		
# 6. float + complex
            res = 3.14 + 20-9j # 3.14+0j + 20-9j
            print(res)

3. 容器类型数据的强制转换

# 我们先定义几个容器类型数据的变量:
		strvar = '红灯停绿灯行'
		listvar = ["张飞","李逵","王瑶"]
		tuplevar = ("小明","小红","小花","小东")
		setvar = {"大喷子","大棍子","大背头"}
# 推荐使用变量命名的字符串作为字典的键
		dictvar = {"aaa":123,"bbb":321,"dpz":"巧舌如簧","dgz":"刚正不阿","dbt":"文武双全"}
		intvar = 6666

1. str 字符串: 强制转换成字符串

# str 字符串对容器类型数据和数字类型数据都可以转换
# 特点: 强制转换成字符串,就是在原有数据的基础上两边套上引号
			res = str(listvar)
			res = str(intvar)
			print(res , typr(res))		
# repr: 可以原型化输出字符串,不转义字符(显示出引号)
			print(repr(res))

2. list 列表: 强制转换成列表

# 特点:
#	如果是字符串,会把每一个字符单独的作为一个元素放到列表中
#	如果是字典,只保留键,形成一套新的列表
#	如果是其他容器,值是单纯的在原有数据基础上换上[]
			res = list(strvar)
			res = list(tuplevar)
			res = list(setvar)
			res = list(dictvar)
			print(res , type(res))

3. tuple 元组: 强制转换成元组

# 注意点: 逗号是区分是否是元组的标识符
# 特点:
#	如果是字符串,会把每一个字符单独的作为一个元素放到元组中
#	如果是字典,只保留键,形成一套新的元组
#	如果是其他容器,值是单纯的在原有数据基础上换上()
			res = tuple(strvar)
			res = tuple(listvar)
			res = tuple(setvar)
			res = tuple(dictvar)
			print(res , typr(res))

4. set 集合: 强制转换成集合

# 注意点: 集合无序,且自动去重
# 特点:
#	如果是字符串,会把每一个字符单独的作为一个元素放到集合中
#	如果是字典,只保留键,形成一套新的集合
#	如果是其他容器,值是单纯的在原有数据基础上换上{}
			res = set(strvar)
			res = set(listvar)
			res = set(tuplevar)
			res = set(dictvar)
			print(res , type(res))
			
# 练习:去掉列表中所有重复的数据
			lst =['a','b','c','f','a','c','d',111,123]
# 表达方式1
			res = set(lst)
			print(res)
			res = list(res)
			print(res)
# 表达方式2
			res = list( set(lst) )
			print(res)

5. dict 字典: 强制转换成字典

# 特点: 字典强制转换时,必须是等长的二级容器,并且容器里面的元素个数是两个

# 二级容器 (list tuple set dict)

# 等长的二级容器 : 里面的元素都是容器,并且容器里面的元素个数都相同
			lst = [(1,2,3),[4,5,6]]
			lst = [(99,88),(77,66)]
# 二级列表 list
			lst = [1,2,[3,4]]
# 二级元组 tuple
			tup = (5,6,7,(8,9,10))
# 二级集合 (集合中元素的数据类型要求: int bool float complex str tuple)
			setvar = {11,12,13,(14,15,16)}
# 二级字典 (字典中的键的数据类型要求: int bool float complex str tuple)
			dic = {"a":1,"b":{"c":2,"d":3}}
# 练习1: 获取'3'这个元素
			res1 = dic["b"]
			print(res1) # {"c":2,"d":3}
			res2 = res1["d"]
			print(res2)
# 简写
			res = dic["b"]["d"]
			print(res)
# 练习2: 获取'Hello'
	container = [1,2,(3,4,{"a":11,"b":{"c":22,"d":[33,44,"Hello"]}})] # 五级容器
			res1 = container[-1]
			print(res1)
			res2 = res1[-1]
			print(res2)
			res3 = res2["b"]
			print(res3)
			res4 = res3["d"]
			print(res4)
			res5 = res4[-1]
			print(res5)
# 简写
			res = container[-1][-1]["b"]["d"][-1]
			print(res)
			
# 强制转换成字典

# 1.外层是列表/元组/集合,里面的容器是列表/元组
			lst = [("a",1),["b",2]]
			tup = (("c",3),["d",4])
			setvar = {(5,6),[7,8],("f1",1),["f2",2]}
			res = dict(lst) # {"a":1,"b":2}
			res = dict(tup) # {"c":3,"d":4}
			res = dict(setvar) # {6:5,7:8,"f1":1,"f2":2} 
			# 因为集合无序,虽然语法上允许,但不符合定义的本意,不推荐使用
			print(res)
# 2. 如果使用字符串,语法是哪个正确,但有局限性
			lst = [("q",1),"p8"] # 字符串长度只能是2个
#			lst = [("q",1),"p88"] error
			print( dict(lst) )
# 总结:
#	str() list() tuple() set() dict()
#	默认创建一个该数据类型的值

4. 变量的缓存机制 (仅对python3.6版本负责)

python3.7 和 python3.8 的缓存机制 : 只要两个值相同,就之开辟一个空间

1. Number 数字类型数据

# 1. int 对于整型而言, -5 ~ 正无穷范围内的相同值 id一致
			var1 = 111
			var2 = 222
			var3 = -6
			var4 = -6
			var5 = var6 = -100 # 相同的地址
			print(id(var1) , id(var2))
			print(id(var3) , id(var4))
			print(id(var5) , id(var6))
# 2. float 对应浮点型而言, 非负数范围内的相同值 id一致
			var1 = 3.14
			var2 = 3.14
			var3 = -3.14
			var4 = -3.14
			print(id(var1) , id(var2))
			print(id(var3) , id(var4))
# 3. bool 对应布尔型而言,值相同的情况下 id一致
			var1 = True
			var2 = False
			print(id(var1) , id(var2))
# 4. complex 复数 : 实数 + 虚数 => 这样的结构中 id永不相同 (只有虚数的情况例外)
			var1 = 3+4j
			var2 = 3+4j
			var3 = 21j
			var4 = 21j
			print(id(var1) , id(var2))
			print(id(var3) , id(var4))

2. 容器类型数据

# 1. 字符串 和 空元组 相同的情况下,地址相同
			var1 = "三叉戟"
			var2 = "三叉戟"
			var3 = ()
			var4 = ()
			print(id(var1) , id(var2))
			print(id(var3) , id(var4))
# 2. 列表,元组,字典,集合无论什么情况 id都不相同 (空元组除外)
			var1 = (1,2,3)
			var2 = (1,2,3)
			print(id(var1) , id(var2))

  • 作者:I believe I can fly~
  • 原文链接:https://blog.csdn.net/qq_31455841/article/details/107125558
    更新时间:2023年7月9日13:07:34 ,共 4107 字。