日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

深挖 Python 元組 pt.2

來源: 責編: 時間:2023-10-10 18:31:34 281觀看
導讀哈嘍大家好,我是咸魚在《深挖 Python 元組 pt.1》中我們了解 Python 元組的一些概念(索引和切片等),以及如何創建元組,最重要的是我們還介紹了元組的不可變特性那么今天我們來繼續深挖 Python 元組打包&解包在 python 中,元

哈嘍大家好,我是咸魚PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

在《深挖 Python 元組 pt.1》中我們了解 Python 元組的一些概念(索引和切片等),以及如何創建元組,最重要的是我們還介紹了元組的不可變特性PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

那么今天我們來繼續深挖 Python 元組PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

打包&解包

PE428資訊網——每日最新資訊28at.com

在 python 中,元組可以被打包(packing )和解包(unpacking )PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

例如,point = x, y, z 將會把 x, y 和 z 的值打包到 point 中,于是創建了一個新元組PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

我們還可以執行反向操作(解包),將元組 point 的值解包為適當數量的變量PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到,x, y, z = point 神奇地將point的內容解壓縮為三個變量。注意,值按順序轉到變量。(第一個值歸第一個變量,第二個值歸第二個變量,依此類推)PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

Python 3.5 擴展了元組解包語法,以處理各種可迭代對象PE428資訊網——每日最新資訊28at.com

所以不單單元組可以解包,可迭代對象也可以解包PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

在常規解包中,變量的數量必須與要解包的值的數量相匹配。否則會報錯PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

解包最常見的用例就是利用解包在變量之間交換值PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

沒有解包的話使用常規賦值在兩個變量之間交換值,必須使用臨時變量PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

通過解包來交換變量值PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

解包還有一個用處是并行分配,比如說下面的操作:我們在進行賦值時需要知道對應的索引PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

如果通過解包來實現,則無需使用索引。這樣能使代碼更易閱讀和理解,且不易出錯PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

Python 還有一個打包和解包運算符 ( * ),我們可以使用它讓解包(打包)操作更加靈活PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

例如當左邊的變量數和右邊元組的元素數量不匹配時,可以使用 *  使得單個變量接收多個值PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

關于這個操作符的更多用法,可以看我之前的文章:《python 星號 * 還能這么用》PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

函數返回元組

PE428資訊網——每日最新資訊28at.com

在某些情況下,需要從函數返回多個值。所以可以構建一個帶有逗號分隔的一系列參數的 return 語句,這樣返回的是一個元組PE428資訊網——每日最新資訊28at.com

我們還可以使函數返回值是列表,這樣需要我們顯式地使用方括號來構建列表PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

內置 divmod() 函數是返回多個值的函數的一個很好的例子。該函數接受兩個數字,并在執行整數除法時返回一個包含商和余數的元組:PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

又或者我打算寫一個函數,這個函數返回一組數的最大值和最小值PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到函數的返回值有兩個:最大值、最小值。當用逗號分隔一系列值時,將創建一個元組。因此,此函數返回一個 tuple 對象PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

深拷貝&淺拷貝

PE428資訊網——每日最新資訊28at.com

當需要轉換數據時,通常需要復制對象,同時保持原始數據不變。在處理可變數據類型(如列表和字典)時,副本非常有用PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

副本可以在不影響原數據的情況下對數據進行更改PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

  • 直接賦值

我們先來看一個例子PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到,student_info、 student_profile 是對同一元組對象的引用。所以, student_profile 是 的 student_info 別名而不是副本PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

  • 淺拷貝

copy 模塊中的 copy() 函數生成等效結果PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到,兩個變量student_info、 student_profile 都包含對同一元組對象和相同元素的引用PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

上面的元組里面包含了一個列表元素,我們知道列表是可變的,我們來試著更改一下PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到,student_profile 更改會影響 student_info 中的原始數據PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

  • 深拷貝

下面的例子中, student_info 通過 deepcopy() 函數制作了student_profilePE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到,兩個變量student_info、 student_profile 指向的元組對象不是同一個PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

如果我們對里面的列表元素進行更改PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

可以看到,對student_profile 的修改不會影響 student_info 中的數據PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

總結一下:PE428資訊網——每日最新資訊28at.com

  • 元組的淺拷貝不會創建一個新的對象(副本)。
  • 元組的深拷貝創建一個新的元組對象
  • 對于元組內的不可變元素,它們仍然會共享相同的內存地址
  • 對于元組內的可變元素,則是創建了一個新的對象,不共享內存地址

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

其他操作

PE428資訊網——每日最新資訊28at.com

  • 元組拼接和重復

在 Python 中連接兩個元組,可以使用加號運算符 ( + )PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

需要注意的是,+ 左右兩邊必須都是元組,即只能將元組跟元組拼接。如果元組跟列表或其他對象拼接的話,會報錯PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

元組使用重復運算符 ( * )將元素克隆多次PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

  • 元組反轉和排序

內置 reversed() 函數將序列作為參數,并返回一個迭代器,該迭代器以相反的順序從輸入序列生成值。PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

使用元組作為參數進行調用 reversed() 時,將獲得一個迭代器對象,該對象以相反的順序生成項PE428資訊網——每日最新資訊28at.com

PE428資訊網——每日最新資訊28at.com

如果要對元組進行排序,可以使用內置 sorted() 函數,該函數將值的可迭代對象作為參數并以列表形式返回排序后的值PE428資訊網——每日最新資訊28at.com

圖片圖片PE428資訊網——每日最新資訊28at.com

如果元組里面的元素數據類型不一致(異構數據),則無法排序PE428資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12724-0.html深挖 Python 元組 pt.2

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: TIOBE 10 月榜單:Java 跌幅最大,C# 逼近 Java

下一篇: Spring Boot中實現訂單30分鐘自動取消的策略

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 甘孜县| 于田县| 淄博市| 交口县| 台州市| 德令哈市| 阿鲁科尔沁旗| 四会市| 盐源县| 额敏县| 宁波市| 长武县| 澜沧| 池州市| 寻乌县| 台湾省| 民乐县| 平陆县| 额尔古纳市| 婺源县| 柘城县| 广水市| 安吉县| 洞头县| 若羌县| 宾川县| 炎陵县| 教育| 尖扎县| 南充市| 永嘉县| 皋兰县| 象山县| 福贡县| 永年县| 阳西县| 富宁县| 密山市| 资源县| 巧家县| 巍山|