在Python中初学者必须避免的5个编程陷阱

B站影视 韩国电影 2025-03-19 13:46 1

摘要:虽然这可能会起作用,但它不是很可读。当其他人(甚至是未来的你)再次访问这些代码时,破译其中的逻辑将花费不必要的努力。解决的办法呢?将复杂的条件分解为较小的描述性变量。例如:

条件和if语句是编码的面包和黄油。然而,初学者最常犯的错误之一是将太多的逻辑塞进一个if语 句中。看看这个例子:

if user.is_authenticated and (user.role == "admin" or user.role == "manager") and user.account_status == "active" and 18

虽然这可能会起作用,但它不是很可读。当其他人(甚至是未来的你)再次访问这些代码时,破译其中的逻辑将花费不必要的努力。解决的办法呢?将复杂的条件分解为较小的描述性变量。例如:

is_authenticated = user.is_authenticated has_proper_role = user.role in ["admin", "manager"] is_active = user.account_status == "active" is_valid_age = 18

这种方法使您的代码自文档化。每个变量名都解释了它在做什么,使您无需过多的注释或猜测将来会发生什么。始终优先考虑可读性而不是简洁!

让我们来谈谈嵌套:将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

这种方法使您的代码“扁平化”,减少了不必要的缩进级别。一般规则:嵌套的层次越少,代码就越容易阅读和修改。

好的名字是干净代码的无名英雄。当你赶时间的时候,使用简短的、模棱两可的变量名是很有吸引力的,比如xytemp,但这会导致混乱。请考虑以下几点:

x =10y =20z = x + y print(z)

xyz代表什么?没人知道!现在,把它和这个比较一下:

price_of_apples = 10 price_of_oranges = 20 total_price = price_of_apples + price_of_oranges print(total_price)

初学者经常在编写代码时假设一切都能完美地工作。但在真实的世界中,事情会发生变化--API失败,用户输入错误数据,或者文件丢失。不能优雅地处理错误会使整个程序崩溃。

下面是一个脆弱代码的例子:

data =open(“File.txt”).readreturnint(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.")

添加错误处理可使代码健壮并防止意外崩溃。

当你在学习的时候,写一次代码然后把它完成是很有诱惑力的。但是伟大的代码不是来自于编写,而是来自于重写。重构是在不改变代码行为的情况下清理和改进代码的过程。

下面是一个重复的、非重构的代码示例:

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”] **2elifshape ==“square”:returnkwargs[“side”] **2elifshape ==“triangle”:return0.5* kwargs[“base”] * kwargs[“height”]

这种方法消除了重复,并使您的代码更容易维护和扩展。

来源:自由坦荡的湖泊AI

相关推荐