- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 984字
- 2021-04-30 12:39:42
3.1.2 序列解壓
在實際應用中,我們經常會有將一個包含N個元素的元組或者序列,解壓后同時賦值給N個變量的操作需求。
任何序列(或者可迭代對象)可以通過一個簡單的賦值語句解壓并賦值給多個變量。唯一的前提就是變量的數量必須與序列元素的數量是一樣的,代碼(decompression_exp_1.py)示例如下:
# tuple decompression num_tup = (1, 2) x, y = num_tup print(f'x is:{x}, y is:{y}')
執行py文件,輸出結果如下:
x is:1, y is:2
如果變量個數和序列元素的個數不匹配,會產生異常,代碼(decompression_exp_1.py)示例如下:
# tuple decompression # 變量個數和序列元素的個數要匹配,否則產生異常 num_tup = (1, 2) try: x, y, z = num_tup except Exception as ex: print(f'出錯了,出錯原因:{ex}')
執行py文件,輸出結果如下:
出錯了,出錯原因:not enough values to unpack (expected 3, got 2)
解壓賦值可以用在任何可迭代對象上,而不僅僅是列表或者元組,包括字符串、文件對象、迭代器和生成器,代碼(decompression_exp_1.py)示例如下:
# list object decompre Obj_list = ['abc', 10, 22.2, (2020, 3, 15)] str_obj, int_obj, float_obj, tuple_obj = obj_list print(f'tuple_obj is:{tuple_obj}') # int,float,tuple object decompression str_obj, int_obj, float_obj, (year, month, day) = obj_list print(f'year is:{year}, month is:{month}, day is:{day}') # str object decompression str_var = 'hello' a, b, c, d, e = str_var print(f'the value of a is:{a}')
執行py文件,輸出結果如下:
tuple_obj is:(2020, 3, 15) year is:2020, month is:3, day is:15 the value of a is:h
若只想解壓一部分,可能會丟棄其他值。對于這種情況,Python并沒有提供特殊的語法,但可以使用任意變量名去占位,在結果中丟掉不需要的變量。在Python中,比較習慣用下劃線(_)作為占位變量,代碼(decompression_exp_1.py)示例如下:
_, _, f_obj, _ = obj_list print(f'f_obj is:{f_obj}')
執行py文件,輸出結果如下:
f_obj is:22.2
使用占位變量有一個前提,就是必須保證選用的占位變量名在其他地方沒被使用。
擴展:在代碼中適當添加注釋。對于程序員來說,養成一個隨時為代碼添加注釋的習慣是非常好的,這對團隊及自身都是很有幫助的。當然,這個前提是添加的注釋是有用的,而不是有誤導性的。
Python中有3種形式的代碼注釋:塊注釋、行注釋及文檔注釋(Docstring)。這三種形式的慣用方法如下。
1)對于復雜的操作、算法以及一些其他人不易理解的技巧或者不能一目了然的代碼,使用塊或者行注釋。
2)行注釋一般放在需要注釋代碼的上一行,很多人習慣放在代碼后面,那樣很容易導致行過長,也容易破壞代碼的美觀性。
3)給外部可訪問的函數和方法(無論是否簡單)添加文檔注釋。注釋要清楚地描述方法的功能,并對參數、返回值以及可能的異常進行說明,使外部調用者僅僅看文檔注釋就能正確使用。較為復雜的內部方法也應該添加盡可能詳細的注釋。
4)代碼更新時,同時注意注釋的更新,這是很多程序員的短板。在實際開發中,代碼更新了,但沒有同步更新注釋,會導致其他代碼維護者被注釋誤導,從而引發新的問題。
- 深度實踐OpenStack:基于Python的OpenStack組件開發
- Arduino by Example
- Java Web基礎與實例教程
- 詳解MATLAB圖形繪制技術
- Building Serverless Architectures
- PrimeFaces Blueprints
- Mockito Essentials
- 奔跑吧 Linux內核
- Mastering Android Studio 3
- Java編程指南:語法基礎、面向對象、函數式編程與項目實戰
- Hadoop Blueprints
- 程序員面試金典(第6版)
- Implementing Splunk(Second Edition)
- Learning Azure DocumentDB
- Daniel Arbuckle's Mastering Python