引言
写 python 代码需要遵循清晰、简洁,提供可读性和可维护性,这样的代码符合 python 的设计原则和编码方式,被称为 Pythonic 的代码。
如果你出现了以下的情况那就很不 Pythonic ,也就是很不 python 了。
1. 函数、变量、类名无意义
错误示范
def v(a, b):
return a + b无意义的名称将导致难以阅读,直接提高了维护成本。
正确示范
# 通过单价和数量获取总金额
def total_amount(unit_price, count):
return unit_price * count2. 未使用解包
错误示范
point = (0, 1)
x = point[0]
y = point[1]python中允许使用解包的方式获取数据,它将更加清晰明了。
正确示范
point = (0, 1)
x, y = point3. 代码行过长
错误示范
fruits = {'banana': 23, 'apple': 10, 'peach': 12, 'watermelon': 44, 'grape': 30, 'pineapple': 55}像类似一长串的变量或者函数参数等等,过长将会影响阅读感受,可以通过换行解决这些问题。
正确示范
fruits = {
'banana': 23,
'apple': 10,
'peach': 12,
'watermelon': 44,
'grape': 30,
'pineapple': 55
}4. 重复的代码未提取函数
错误示范
py_path = '/home/env/main.py'
if os.path.exists(py_path):
py_file_name = py_path.split(os.sep)[-1]
else:
py_file_name = None
docx_path = '/home/export/output.docx'
if os.path.exists(docx_path):
docx_file_name = docx_path.split(os.sep)[-1]
else:
docx_file_name = None
print(py_file_name)
print(docx_file_name)可以明显看到代码中存在重复的代码,如果这样编写不仅增加了阅读难度,也让代码文件变得更加臃肿。
正确示范
def get_file_name(path):
file_name = None
if os.path.exists(path):
file_name = py_path.split(os.sep)[-1]
return file_name
py_path = '/home/env/main.py'
py_file_name = get_file_name(py_path)
docx_path = '/home/export/output.docx'
docx_file_name = get_file_name(docx_path)
print(py_file_name)
print(docx_file_name)5. 使用临时变量交换变量
错误示范
x = 3
y = 4
temp = x
x = y
y = temp为了交换两个变量,使用了一个临时变量,虽然完成了工作,但在python中可以使用更加简洁的方式。
正确示范
x = 3
y = 4
y, x = x, y6. 不习惯用列表推导式
错误示范
words = ['hello', 'world', 'hello', 'python']
text = ''
for word in words:
text += f'{word} '列表推导式不仅带来更优的性能,在代码量和可读性上也有一定优势。
正确示范
words = ['hello', 'world', 'hello', 'python']
text = ' '.join([word for word in words])7. 习惯用 [key] 的方式获取字典内容
错误示范
fruits = {
'banana': 23,
'watermelon': 44,
}
apple = fruits['apple']获取一个不存在的键名,将会直接报错,但使用 get() ,不仅仅能够获取相应键的值,而且如果键不存在还可以赋予一个默认值。
正确示范
fruits = {
'banana': 23,
'watermelon': 44,
}
apple = fruits.get('apple', 0)8. import在一行
错误示范
import os, time虽然语法上面没有问题,但os和time是有独立性的,可读性不佳。
正确示范
import os
import time8. 不习惯用with
错误示范
f = open('test.text', 'w')
f.write('hello')
f.close()不使用with的情况下,很容易忘记关闭操作,造成内存开销。
正确示范
with open('test.text', 'w') as f:
f.write('hello')结尾
还有很多规范因为篇幅问题就不一一展开了,要实现 Pythonic ,不仅仅是多写代码,还需要多读其他人比较优秀的开源代码。
觉得内容不错?点个赞鼓励一下吧
