这样写代码很不python(python 写代码)

引言

python 代码需要遵循清晰、简洁,提供可读性和可维护性,这样的代码符合 python 的设计原则和编码方式,被称为 Pythonic 的代码。

如果你出现了以下的情况那就很不 Pythonic ,也就是很不 python 了。

1. 函数、变量、类名无意义

错误示范

def v(a, b):
    return a + b

无意义的名称将导致难以阅读,直接提高了维护成本。

正确示范

# 通过单价和数量获取总金额
def total_amount(unit_price, count):
    return unit_price * count

2. 未使用解包

错误示范

point = (0, 1)
x = point[0]
y = point[1]

python中允许使用解包的方式获取数据,它将更加清晰明了。

正确示范

point = (0, 1)
x, y = point

3. 代码行过长

错误示范

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, y

6. 不习惯用列表推导式

错误示范

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 time

8. 不习惯用with

错误示范

f = open('test.text', 'w')
f.write('hello')
f.close()

不使用with的情况下,很容易忘记关闭操作,造成内存开销。

正确示范

with open('test.text', 'w') as f:
    f.write('hello')

结尾

还有很多规范因为篇幅问题就不一一展开了,要实现 Pythonic ,不仅仅是多写代码,还需要多读其他人比较优秀的开源代码。

觉得内容不错?点个赞鼓励一下吧

原文链接:,转发请注明来源!