Python代码中的三大常见“愚形”,你中招了吗?
愚形,是围棋的专业术语,凡是效率低下且不美观的棋形,统称为愚形。比如空三角和团子,就是典型的愚形。低水平棋手经常会在无意中走出愚形,而那些高手平棋手,尽管在生死存亡的危机时刻也会用愚形求生或者逃命,但在正常局面下他们是不会走出愚形的。在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
- 1
- 2
- 3
- 4
- 5
事实上,上面的两种写法都是典型的“愚形”。正确的写法应该是用一颗星(*)解包列表:
>>> print("语文%d,数学%d,英语%d"%(*grade,))
语文90,数学95,英语93
>>> print("语文{},数学{},英语{}".format(*grade,))
语文90,数学95,英语93
- 1
- 2
- 3
- 4
如果再加上一个变量,也是同样的写法:
>>> name = '阿美'
>>> grade = [90, 95, 93]
>>> print("%s的成绩:语文%d,数学%d,英语%d"%(name, *grade))
阿美的成绩:语文90,数学95,英语93
>>> print("{}的成绩:语文{},数学{},英语{}".format(name, *grade))
阿美的成绩:语文90,数学95,英语93
- 1
- 2
- 3
- 4
- 5
- 6
2. 不会使用enumerate()函数
遍历列表是Python代码中最常见的结构:
>>> grade = [90, 95, 93]
>>> for g in grade:
print(g)
90
95
93
- 1
- 2
- 3
- 4
- 5
- 6
- 7
如果遍历列表时,循环体内同时用到了元素及其索引,下面的写法似乎是自然而然的:
>>> grade = [90, 95, 93]
>>> for i in range(len(grade)):
print(i, grade[i])
0 90
1 95
2 93
- 1
- 2
- 3
- 4
- 5
- 6
- 7
然而,这也是“愚形”。漂亮的写法是使用枚举函数:
>>> grade = [90, 95, 93]
>>> for i, g in enumerate(grade):
print(i, g)
0 90
1 95
2 93
- 1
- 2
- 3
- 4
- 5
- 6
- 7
使用枚举函数enumerate(),返回的是一个迭代器,类似于range()函数,因此你无需担心效率问题。
3. 忽略了字典的get()方法
字典的使用,似乎从来就不存在问题。但是,当我们试图访问一个不存在的键时,就会发生意外:
>>> grade = dict([('语文',90), ('数学',95), ('英语',93)])
>>> 语文 = grade['语文']
>>> 物理 = grade['物理']
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module> 物理 = grade['物理']
KeyError: '物理'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
为了避免程序抛出异常,很多人会小心翼翼地把代码写成这样:
>>> if '物理' in grade:
物理 = grade['物理']
else:
物理 = 0
- 1
- 2
- 3
- 4
或者使用三元表达式:
>> 物理 = grade['物理'] if '物理' in grade else 0
- 1
遗憾的是,上面两种写法都是“愚形”,因为字典对象本身自带一个更简洁优雅的get()方法:
>>> 物理 = grade.get('物理', 0)
- 1
get()的第2个参数,表示键不存在时函数返回的值。如果省略该参数,键不存在时函数返回None(无返回)。
文章来源: xufive.blog.csdn.net,作者:天元浪子,版权归原作者所有,如需转载,请联系作者。
原文链接:xufive.blog.csdn.net/article/details/104894182
- 点赞
- 收藏
- 关注作者
评论(0)