第七章 組合數(shù)據(jù)-2元組Tuple
Python的元組與列表類似,不同之處在于元組的元素不能修改。元組使用小括號,元組創(chuàng)建很簡單,只需要在括號中添加元素,并使用逗號隔開即可。我們來看看下面這個例子,寫一寫程序運行結(jié)果吧。?
t1=(3)
t2=(3,)
print(t1,type(t1))
print(t2,type(t2))
print(random.random())
?
容我想一想 type 是啥意思了?直接告訴你:返回對象的類型。把程序的運行結(jié)果寫在上面空白處。我猜你寫對的概率是多少呢?可能性是random.random(),見證奇跡的時刻到了,
3 <class 'int'>
(3,) <class 'tuple'>
0.08515720786212122
?
看到了吧,加不加逗號不一樣,數(shù)據(jù)類型都不同,一個是整型int,一個是元組類型tuple。
元組中的元素值是不允許修改的,但我們可以對元組進行連接。
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元組元素操作是非法的。
# tup1[0] = 100
# 創(chuàng)建一個新的元組
tup3 = tup1 + tup2
print(tup3)? #輸出 (12, 34.56, 'abc', 'xyz')
?
與字符串一樣,元組之間可以使用 + 號和 * 號進行運算,也就是說元組可以組合和復(fù)制,運算后會生成一個新的元組。

元組也是一個序列,所以我們可以訪問元組中的指定位置的元素,也可以截取索引中的一段元素,如下所示:
tup=('樂高','槍模','和平精英')
tup [2] '和平精英'????????? #讀取第三個元素
tup [-2] '槍模'???????????? #反向讀取,讀取倒數(shù)第二個元素
tup [1:] ('槍模','和平精英')?? #截取元素,從第二個開始后的所有元素。
?
元組的主要作用是保護數(shù)據(jù)安全,因為元組創(chuàng)建后不能修改。元組還可以接收一個函數(shù)的多個返回值,這個我們在函數(shù)章節(jié)中已經(jīng)學(xué)過,元組還有一個用處,就是作為自動組包/解包的默認類型(好高深的概念?。?。其實有些東西當(dāng)我們不了解時覺得很深奧,但是如果你學(xué)會了,“天空飄來五個字兒那都不是事”。我曾經(jīng)特別佩服光頭強,因為他會開車而我不會。但是當(dāng)我學(xué)會了開車(現(xiàn)在又不會開車了,只是有一個駕照而已),感覺也就那么回事。光頭強還會打網(wǎng)球,坐在躺椅上帶著太陽鏡享受假期,在李老板的壓榨下依然能快樂的生活,因此我仍然喜歡他。

言歸正傳,我們談?wù)勛詣咏M包/解包。舉個例子就明白了。
?
# 如果有多個變量賦值給一個變量時,會把多個值自動組包成元組
info = 10, 20?
print(type(info))
?
# 如果等號左邊的變量個數(shù)和元組中元素的個數(shù)相同時,元組會自動解包,就是一一對應(yīng)去賦值
tuple = (20, 30)
a, b = tuple
print(a)
print(b)
?
怎么樣簡單吧!順便考慮一下,如何交換兩個變量的值?先自己想想,后面提供三個方法。
#交換兩個數(shù)
a = 10? # 把a的值變?yōu)?0
b = 20? # 把b的值變?yōu)?0
#方法1
temp = a
a = b
b = temp
#方法2
a = a + b
b = a - b
a = a - b
#方法3
a, b = b, a