Python代碼中的三大常見愚形

愚形,是圍棋的專業術語,凡是效率低下且不美觀的棋形,統稱爲愚形。文總結了Python代碼中的三大常見“愚形”,快來看看,你中招了嗎?

  1. 不會使用一顆星(*)解包

列表 grade 是語文、數學、英語等三門課程的成績,要把成績格式化爲“語文90,數學95,英語93”樣式的字符串,不管是習慣用C語言風格的格式化輸出,還是習慣用format函數,大概很多人都會這樣寫吧:

grade = [90, 95, 93]

print("語文%d,數學%d,英語%d"%(grade[0], grade[1], grade[2]))

語文90,數學95,英語93

print("語文{},數學{},英語{}".format(grade[0], grade[1], grade[2]))

語文90,數學95,英語93

事實上,上面的兩種寫法都是典型的“愚形”。XM返傭正確的寫法應該是用一顆星(*)解包列表:

print("語文%d,數學%d,英語%d"%(*grade,))

語文90,數學95,英語93

print("語文{},數學{},英語{}".format(*grade,))

語文90,數學95,英語93

如果再加上一個變量,也是同樣的寫法:

name = '阿美'

grade = [90, 95, 93]

print("%s的成績:語文%d,數學%d,英語%d"%(name, *grade))

阿美的成績:語文90,數學95,英語93

print("{}的成績:語文{},數學{},英語{}".format(name, *grade))

阿美的成績:語文90,數學95,英語93

  1. 不會使用enumerate()函數

遍歷列表是Python代碼中最常見的結構:

grade = [90, 95, 93]

for g in grade:

print(g)

90

95

93

如果遍歷列表時,循環體內同時用到了元素及其索引,下面的寫法似乎是自然而然的:

grade = [90, 95, 93]

for i in range(len(grade)):

print(i, grade[i])

0 90

1 95

2 93

然而,這也是“愚形”。漂亮的寫法是使用枚舉函數:

grade = [90, 95, 93]

for i, g in enumerate(grade):

print(i, g)

0 90

1 95

2 93

使用枚舉函數enumerate(),返回的是一個迭代器,類似於range()函數,因此你無需擔心效率問題。

  1. 忽略了字典的get()方法

字典的使用,似乎從來就不存在問題。但是,當我們試圖訪問一個不存在的鍵時,就會發生意外:

grade = dict([('語文',90), ('數學',95), ('英語',93)])

語文 = grade['語文']

物理 = grade['物理']

Traceback (most recent call last):

File "", line 1, in

物理 = grade['物理']

KeyError: '物理'

爲了避免程序拋出異常,很多人會小心翼翼地把代碼寫成這樣:

if '物理' in grade:

物理 = grade['物理']

else:

物理 = 0

或者使用三元表達式:

物理 = grade['物理'] if '物理' in grade else 0

1

遺憾的是,上面兩種寫法都是“愚形”,因爲字典對象本身自帶一個更簡潔優雅的get()方法:

物理 = grade.get('物理', 0)

1

get()的第2個參數,表示鍵不存在時函數返回的值。如果省略該參數,鍵不存在時函數返回None(無返回)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章