1.过于复杂的条件
条件和if语句是编码的面包和黄油。然而,初学者最常犯的错误之一是将太多的逻辑塞进一个if语 句中。看看这个例子:
if user.is_authenticated and (user.role == "admin" or user.role == "manager") and user.account_status == "active" and 18 <= user.age <= 35:
# Do something
虽然这可能会起作用,但它不是很可读。当其他人(甚至是未来的你)再次访问这些代码时,破译其中的逻辑将花费不必要的努力。解决的办法呢?将复杂的条件分解为较小的描述性变量。例如:
is_authenticated = user.is_authenticated
has_proper_role = user.role in ["admin", "manager"]
is_active = user.account_status == "active"
is_valid_age = 18 <= user.age <= 35
if is_authenticated and has_proper_role and is_active and is_valid_age:
# Do something
这种方法使您的代码自文档化。每个变量名都解释了它在做什么,使您无需过多的注释或猜测将来会发生什么。始终优先考虑可读性而不是简洁!
2.嵌套地狱
让我们来谈谈嵌套:将if语句放在if语句中等等。这可能对小任务有用,但很快就会变得难以管理。举个例子:
if numbers is not None:
if len(numbers) > 0:
if all(isinstance(n, int) for n in numbers):
for n in numbers:
if n > 0:
if n % 2 == 0:
result.append(n)
哎呀!这种“楼梯代码”很难遵循和维护。一个更好的方法是在条件不满足时,改变逻辑,及早纾困:
if numbers is None:
return
if not all(isinstance(n, int) for n in numbers):
return
for n in numbers:
if n <= 0 or n % 2 != 0:
continue
result.append(n)
这种方法使您的代码“扁平化”,减少了不必要的缩进级别。一般规则:嵌套的层次越少,代码就越容易阅读和修改。
3.忽视传统习俗
好的名字是干净代码的无名英雄。当你赶时间的时候,使用简短的、模棱两可的变量名是很有吸引力的,比如x、y或temp,但这会导致混乱。请考虑以下几点:
x =10
y =20
z = x + y
print(z)
x、y、z代表什么?没人知道!现在,把它和这个比较一下:
price_of_apples = 10
price_of_oranges = 20
total_price = price_of_apples + price_of_oranges
print(total_price)
描述性名称使您的代码自解释,即使没有注释。遵守约定--对Python使用snake_case,对JavaScript使用camelCase,并遵循所使用语言的最佳实践。
4.跳过错误处理
初学者经常在编写代码时假设一切都能完美地工作。但在真实的世界中,事情会发生变化--API失败,用户输入错误数据,或者文件丢失。不能优雅地处理错误会使整个程序崩溃。
下面是一个脆弱代码的例子:
data =open(“file.txt”).read()
returnint(data)*2
如果file.txt不存在或包含非数字数据,程序将抛出错误。总是预测问题并妥善处理:
try:
with open("file.txt") as file:
data = file.read()
result = int(data) * 2
except FileNotFoundError:
print("File not found. Please check the file name.")
except ValueError:
print("File contains invalid data. Ensure it's a number.")
添加错误处理可使代码健壮并防止意外崩溃。
5.不定期重构
当你在学习的时候,写一次代码然后把它完成是很有诱惑力的。但是伟大的代码不是来自于编写,而是来自于重写。重构是在不改变代码行为的情况下清理和改进代码的过程。
下面是一个重复的、非重构的代码示例:
def calculate_circle_area(radius):
return 3.14 * radius * radius
def calculate_square_area(side):
return side * side
def calculate_triangle_area(base, height):
return 0.5 * base * height
注意到冗余了吗?将类似的功能重构为可重用的函数:
defcalculate_area(shape,**kwargs):
ifshape ==“circle”:
return3.14* kwargs[“radius”] **2
elifshape ==“square”:
returnkwargs[“side”] **2
elifshape ==“triangle”:
return0.5* kwargs[“base”] * kwargs[“height”]
这种方法消除了重复,并使您的代码更容易维护和扩展。