日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深挖 Python 元組 pt.2

哈嘍大家好,我是咸魚

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了平遠(yuǎn)免費(fèi)建站歡迎大家使用!

在《深挖 Python 元組 pt.1》中我們了解 Python 元組的一些概念(索引和切片等),以及如何創(chuàng)建元組,最重要的是我們還介紹了元組的不可變特性

那么今天我們來繼續(xù)深挖 Python 元組

打包&解包

在 python 中,元組可以被打包(packing )和解包(unpacking )

例如,point = x, y, z 將會把 x, y 和 z 的值打包到 point 中,于是創(chuàng)建了一個新元組

圖片

我們還可以執(zhí)行反向操作(解包),將元組 point 的值解包為適當(dāng)數(shù)量的變量

圖片

可以看到,x, y, z = point 神奇地將point的內(nèi)容解壓縮為三個變量。注意,值按順序轉(zhuǎn)到變量。(第一個值歸第一個變量,第二個值歸第二個變量,依此類推)

Python 3.5 擴(kuò)展了元組解包語法,以處理各種可迭代對象

所以不單單元組可以解包,可迭代對象也可以解包

在常規(guī)解包中,變量的數(shù)量必須與要解包的值的數(shù)量相匹配。否則會報錯

圖片

解包最常見的用例就是利用解包在變量之間交換值

沒有解包的話使用常規(guī)賦值在兩個變量之間交換值,必須使用臨時變量

圖片

通過解包來交換變量值

圖片

解包還有一個用處是并行分配,比如說下面的操作:我們在進(jìn)行賦值時需要知道對應(yīng)的索引

圖片

如果通過解包來實(shí)現(xiàn),則無需使用索引。這樣能使代碼更易閱讀和理解,且不易出錯

圖片

Python 還有一個打包和解包運(yùn)算符 ( * ),我們可以使用它讓解包(打包)操作更加靈活

例如當(dāng)左邊的變量數(shù)和右邊元組的元素數(shù)量不匹配時,可以使用 *  使得單個變量接收多個值

圖片

關(guān)于這個操作符的更多用法,可以看我之前的文章:《python 星號 * 還能這么用》

函數(shù)返回元組

在某些情況下,需要從函數(shù)返回多個值。所以可以構(gòu)建一個帶有逗號分隔的一系列參數(shù)的 return 語句,這樣返回的是一個元組

我們還可以使函數(shù)返回值是列表,這樣需要我們顯式地使用方括號來構(gòu)建列表

內(nèi)置 divmod() 函數(shù)是返回多個值的函數(shù)的一個很好的例子。該函數(shù)接受兩個數(shù)字,并在執(zhí)行整數(shù)除法時返回一個包含商和余數(shù)的元組:

圖片

又或者我打算寫一個函數(shù),這個函數(shù)返回一組數(shù)的最大值和最小值

圖片

可以看到函數(shù)的返回值有兩個:最大值、最小值。當(dāng)用逗號分隔一系列值時,將創(chuàng)建一個元組。因此,此函數(shù)返回一個 tuple 對象

深拷貝&淺拷貝

當(dāng)需要轉(zhuǎn)換數(shù)據(jù)時,通常需要復(fù)制對象,同時保持原始數(shù)據(jù)不變。在處理可變數(shù)據(jù)類型(如列表和字典)時,副本非常有用

副本可以在不影響原數(shù)據(jù)的情況下對數(shù)據(jù)進(jìn)行更改

  • 直接賦值

我們先來看一個例子

圖片

可以看到,student_info、 student_profile 是對同一元組對象的引用。所以, student_profile 是 的 student_info 別名而不是副本

  • 淺拷貝

copy 模塊中的 copy() 函數(shù)生成等效結(jié)果

圖片

可以看到,兩個變量student_info、 student_profile 都包含對同一元組對象和相同元素的引用

上面的元組里面包含了一個列表元素,我們知道列表是可變的,我們來試著更改一下

圖片

可以看到,student_profile 更改會影響 student_info 中的原始數(shù)據(jù)

  • 深拷貝

下面的例子中, student_info 通過 deepcopy() 函數(shù)制作了student_profile

圖片

可以看到,兩個變量student_info、 student_profile 指向的元組對象不是同一個

如果我們對里面的列表元素進(jìn)行更改

圖片

可以看到,對student_profile 的修改不會影響 student_info 中的數(shù)據(jù)

總結(jié)一下:

  • 元組的淺拷貝不會創(chuàng)建一個新的對象(副本)。
  • 元組的深拷貝創(chuàng)建一個新的元組對象
  • 對于元組內(nèi)的不可變元素,它們?nèi)匀粫蚕硐嗤膬?nèi)存地址
  • 對于元組內(nèi)的可變元素,則是創(chuàng)建了一個新的對象,不共享內(nèi)存地址

其他操作

  • 元組拼接和重復(fù)

在 Python 中連接兩個元組,可以使用加號運(yùn)算符 ( + )

圖片

需要注意的是,+ 左右兩邊必須都是元組,即只能將元組跟元組拼接。如果元組跟列表或其他對象拼接的話,會報錯

圖片

元組使用重復(fù)運(yùn)算符 ( * )將元素克隆多次

圖片

  • 元組反轉(zhuǎn)和排序

內(nèi)置 reversed() 函數(shù)將序列作為參數(shù),并返回一個迭代器,該迭代器以相反的順序從輸入序列生成值。

圖片

使用元組作為參數(shù)進(jìn)行調(diào)用 reversed() 時,將獲得一個迭代器對象,該對象以相反的順序生成項(xiàng)

如果要對元組進(jìn)行排序,可以使用內(nèi)置 sorted() 函數(shù),該函數(shù)將值的可迭代對象作為參數(shù)并以列表形式返回排序后的值

圖片

如果元組里面的元素數(shù)據(jù)類型不一致(異構(gòu)數(shù)據(jù)),則無法排序


分享題目:深挖 Python 元組 pt.2
網(wǎng)頁鏈接:http://www.5511xx.com/article/cdpegeo.html