Python代码中的三大常见愚形

吃可爱长大的小学妹 提交于 2020-03-19 16:47:55

愚形,是围棋的专业术语,凡是效率低下且不美观的棋形,统称为愚形。文总结了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(无返回)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!