引例:用一行代码实现交换a,b的值
a = 18
b = 7
a,b = b,a #写法一:解构(其实它就是tuple的拆包)
print(a,b) #7 18
a,b = (b,a) #写法二:普通元组形式的拆包(只要是将可迭代对象分别赋值出去,就叫解构)
print(a,b) #7 18
小知识:n个元素(元素可以是任意数据类型)之间用逗号隔开,就是个tuple,只不过不具备tuple的格式而已.见到他,计算机会自动对其进行封装,封装成1个元组
eg:
(1,2,3) 普通元组
1,2,3 也是个元组
1,[22,"太白",88,666],True,17 也是个元组 #元素可任意,只要是n个元素罗列起来,再用逗号隔开,就是元组
元组的拆包(元组的解构): 即分别赋值,一一对应(即将元组拆开,分别把值赋出去)
a,b = (1,666)
print(a,b) #1 666
a,b,c = (1,666,12)
print(a,b,c) #1 666 12 #元组里元素个数任意,但要与被赋值的对象个数相等
关于解构:
1.等号左边是变量,右边是可迭代对象;若右边是n个变量,逗号隔开,则计算机将其默认为元组(计算机会先将其封装成元# 组,再解构)
2.等号右边的可迭代对象的元素个数必须与等号左边的变量个数相等,且2者一一对应
3.解构-改变的只是指向,没有重新开辟新的内存空间
a = 1
b = 2
print("is a",id(a)) #is a 1892117520
print("is b",id(b)) #is b 1892117552
a,b = b,a
print("is a",id(a)) #is b 1892117552
print("is b",id(b)) #is b 1892117520
例子:
(1).凡是可迭代对象,都可进行解构
a,b,c = "112" #str里的元素个数必须与等号左边的变量数相等
print(a,b,c) #1 1 2
a,b = ("1","2") #tuple的解构-又叫元组的拆包
print(a,b) #1 2
a,b = ["4","5"] #list的解构
print(a,b)
a,b = {"a":1,"b":2,}
print(a,b) #a b #字典的拆包,赋值过去的只是dic的键(因为for dic时,只是循环的字典的键)
a,b = (1,2,) #set的解构
print(a,b)
(2).可获取任意的变量个数的值,不想要的值可用_代替;只打印想要的这些值
写法一:
a,_,c = "你好啊"
print(a,c) #你 啊 #只打印a,c
写法二:
a,b,c = "你好啊"
print(a,c) #你 啊 #只打印a,c
具体实例:
items() #字典
遍历dict中的键值对:
for key,value in dic.items(): # key,value是解构,将小元组里的键和值直接解构出来
print(key,value) #打印的也是2个
for i in dic.items():
print(i) #错:打印出来是元组形式的(键:值),未对其进行解构