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
#好习惯
defadd_item(item,items=None):
if items is None:
items = []
items.append(item)
return items
理由:函数的默认参数值,是在函数定义阶段就完成计算的,而非每次调用函数时重新生成。这就意味着,若默认参数为列表、字典这类可变对象,该对象会在函数的所有调用过程中被共享使用,最终引发程序出现意料之外的运行结果。
5.不会使用推导式
#坏习惯
squares = []
for i in range(5):
squares.append(i ** 2)
#好习惯
squares = [i ** 2 for i in range(5)]
理由:推导式是 Python 中简洁又实用的语法糖,不仅能精简代码行数,还能提升代码的可读性与编写执行效率。
6.使用type(x)检查类型
#坏习惯
value = 42
if type(value) is int:
print("It's an integer")
#好习惯
value = 42
if isinstance(value,int):
print("It's an integer")
理由:相较于 isinstance,type 的使用灵活性不足,而且它无法正确识别和处理类的继承关系。
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()
# Some code to be timed
end_time = time.time()
#好习惯
start_time = time.perf_counter()
# Some code to be timed
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:\\Documents\\file.txt"
#好习惯
raw_string = r"C:\Documents\file.txt"
理由:使用原始字符串能有效提升代码可读性,尤其在处理文件路径、正则表达式这类包含大量反斜杠的场景中更具优势;原始字符串的特性,能明确告知阅读者,无需将其中的反斜杠解析为转义字符。
我还整理了一些Python入门学习资料,希望可以帮到有需要的人!
获取方式:
1点赞+再看
2关注公众号,厚台私信发送【资料】领取