官术网_书友最值得收藏!

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)代碼更新時,同時注意注釋的更新,這是很多程序員的短板。在實際開發中,代碼更新了,但沒有同步更新注釋,會導致其他代碼維護者被注釋誤導,從而引發新的問題。

主站蜘蛛池模板: 丰原市| 长兴县| 广元市| 武鸣县| 灵寿县| 河西区| 大同市| 玛沁县| 宝兴县| 虹口区| 平湖市| 阳谷县| 和龙市| 渭源县| 贡山| 辽阳县| 芜湖县| 仁化县| 龙陵县| 赤壁市| 和平县| 项城市| 内黄县| 武隆县| 德兴市| 凌海市| 城固县| 抚宁县| 拉孜县| 安龙县| 乐安县| 离岛区| 临武县| 石景山区| 隆子县| 开化县| 四川省| 平罗县| 上蔡县| 连州市| 察隅县|