1、手动进行字符串格式化
# 坏习惯
name = "Alice"
greeting = "Hello, " + name + "!"
# 好习惯
name = "Alice"
greeting = f"Hello, {name}!"
理由:使用+进行字符串拼接会导致代码可读性差,而且在复杂情况下容易出错,f-string 可读性更好
2、手动关闭文件
# 坏习惯
file = open("example.txt", "r")
content = file.read()
file.close()
# 好习惯
with open("example.txt", "r") as file:
content = file.read()
理由:手动关闭文件容易忘记,使用上下文管理器(with语句)会在代码执行完毕后自动关闭文件,即使发生异常也会被正确处理,更加安全可靠
3、使用裸 except子句
# 坏习惯
try:
result = 10 / 0
except:
print("Error occurred")
# 好习惯
try:
result = 10 / 0
except ZeroDivisionError:
print("Error occurred")
理由:裸 except 会捕捉所有异常,包括系统退出信号等。这可能会导致在处理异常时掩盖真正的错误,使得调度变得更加困难。
4、默认参数使用可变对象
# 坏习惯
def add_item(item, items=[]):
items.append(item)
return items
# 好习惯
def add_item(item, items=None):
if items is None:
item = []
items.append(item)
return items
理由:默认参数在函数定义时被计算,而不是在每次函数调用时。这意味着如果默认参数是可变对象(如列表或字典),那么它将在所有函数调用之间共享,导致意外的结果
5、不会使用推导式
# 坏习惯
squares = []
for i in range(5):
squares.append(i ** 2)
# 好习惯
squares = [i ** 2 for i in range(5)]
理由:推导式是一种简洁,可读性高的语法糖,可以减少代码行数,提高效率
6、使用 type(x) 检查类型
# 坏习惯
value = 42
if type(value) is int:
print("It is an integer")
# 好习惯
value = 42
if isinstance(value, int):
print("It is an integer")
理由:type 不如 isintance 灵活,且无法处理继承关系。
7、使用 ==判断是否为 None, True 或 False
# 坏习惯
if x == None:
print("x is None")
# 好习惯
if x is None:
print("x is None")
理由:在Python中, None, True 或 False 是单例对象,使用 is 能确保比较的是对象的身份。另外,对象的 __eq__方法可以被重载,这就意味着 == 可能不总是按照我们的期望的方式进行比较。
8、使用 bool(...) 或 len(...) 进行条件检查
# 坏习惯
my_list = [1, 2, 3]
if len(my_list) != 0:
print("List is not empty")
# 好习惯
my_list = [1, 2, 3]
if my_list:
print("List is not empty")
理由:在条件判断时使用可读性更高的表达式,不必显式地检查长度或真值。
9、使用 range(len(...)), 而不是 enumerate
# 坏习惯
my_list = ['apple', 'banana', 'orange']
for i in range(len(my_list)):
item = my_list[i]
print(i, item)
# 好习惯
my_list = ['apple', 'banana', 'orange']
for i, item in enumerate(my_list):
print(i, item)
理由:enumerate()提供了在迭代中同时获取索引和值的优雅方式,比手动追踪索引更好
10、不了解字典的 items 方法
# 坏习惯
my_dict = {'a': 1, 'b': 2, 'c':3}
for key in my_dict:
print(key, my_dict[key])
# 好习惯
my_dict = {'a': 1, 'b': 2, 'c':3}
for key, value in my_dict.items():
print(key, value)
理由:items() 提供了更直接的方式同时获取键和值,避免了额外的字典查找。
11、不使用元组解包
# 坏习惯
coordinates = (3, 5)
x = coordinates[0]
y = coordinates[1]
# 好习惯
coordinates = (3, 5)
x, y = coordinates
理由:元组解包能够使代码更加简洁,提高可读性。
12、使用 time() 进行代码计时
# 坏习惯
start_time = time.time()
end_time = time.time()
# 好习惯
start_time = time.perf_counter()
end_time = time.perf_counter()
理由:perf_counter()提供了更高精度的计时,适用于测量小段代码的执行时间。time() 通常精度较低,可能不适合测量短时间间隔。
13、在生产环境使用 print 语句而不是日志
# 坏习惯
result = calculate_result()
print("Result:", result)
# 好习惯
import logging
result = calculate_result()
logging.info("Result: %s", result)
理由:print 语句是调度的一种方式,但在生产环境中使用日志更为合适,具备更多配置选项和级别
14、使用 import * 导入模块
# 坏习惯
from module import *
# 好习惯
from module import specific_function_or_class
理由:导入所有符号可能导致命名冲突,不利用代码维护。
15、不使用原始字符串
# 坏习惯
regular_string = "C:\\Documnets\\file.txt"
# 好习惯
regular_string = r"C:\Document\file.txt"
理由:使用原始字符串可以提高代码的可读性,尤其是在处理路径,正则表达式等需要反斜杠的情况下。原始字符串告诉读者不要解释反斜杠为转义字符。
16、不遵循 PEP8 编码规范
# 坏习惯
aVar=5
result=aVar+2
# 好习惯
a_var = 5
result = a_var + 2
理由:PEP8 提供了一致的代码风格,有助于提高代码的可读性,可维护性,以及团队协作。
标签:16,Python,坏习惯,item,result,time,print,my From: https://www.cnblogs.com/yeyuzhuanjia/p/18334254