关于解构

引例:用一行代码实现交换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) #错:打印出来是元组形式的(键:值),未对其进行解构

猜你喜欢

转载自www.cnblogs.com/wanshizidiao/p/11020166.html