让你成为糟糕程序员的 11 个 Python 编码习惯
简介 Python 因其简洁性和可读性而备受推崇,但即使是最有经验的程序员也可能会陷入影响代码质量的习惯中。
在本博客中,我们将探讨 10 种常见的编码习惯,它们会降低您作为 Python 程序员的效率。
通过识别和纠正这些习惯,您可以提高代码的可维护性、效率和整体质量。
让我们来看看你是否有这些编码陋习。
-
不使用描述性变量名
有意义的变量名可以提高代码的清晰度。使用 "a "或 "temp "这样含糊不清或通用的名称会使代码难以理解。请选择能表达变量用途的描述性名称。
# 不好
x = calculate(user_input)
# 好的
result = calculate(user_input)
-
忽略注释和文档
清晰的注释和文档对于理解复杂的代码非常宝贵。忽略对函数和类的适当解释会给维护和协作带来挑战。
# 不好
def calc(x, y):
return x + y
# 好
def calculate_sum(x, y):
"""
返回两个数字的和。
"""
返回 x + y
-
过度使用全局变量
全局变量可能导致意想不到的行为和错误。请优先使用函数参数或类属性,以尽量减少意外的副作用,提高代码的模块化程度。
# 不好
x = 5
def multiply(y):
return x * y
# 好
def multiply(x, y):
return x * y
-
未利用列表理解功能
列表理解为生成列表提供了一种简洁可读的方法。如果不使用它们,就会导致代码冗长、效率低下。
# 坏
平方 = []
for num in range(5):
squares.append(num ** 2)
# 好
squares = [num ** 2 for num in range(5)]
-
忽略 PEP 8 指南
遵循 Python Enhancement Proposal (PEP) 8 指南看似无关紧要,但格式的一致性能显著提高代码的可读性和协作性。忽略这些指南会导致混乱,并妨碍与其他开发者的协作。
# Bad
if condition:
value = 42
# 好
if condition:
value = 42
-
编写低效循环
使用 for 循环来完成一些可以用内置函数如 map()
、filter()
或 comprehensions)解决的简单任务,会不必要地减慢代码的运行速度。
# 不好
results = []
for num in nums:
results.append(some_function(num))
# 好的
results = list(map(some_function, nums))
-
不正确处理异常
忽略异常或使用简单的 except: 子句会隐藏错误并导致意外故障。具体说明你捕获和处理的异常,可以改进调试和错误解决。
# 糟糕
try:
value = int(user_input)
except:
value = None
# 好
try:
value = int(user_input)
except ValueError:
value = None
-
内存管理不善
创建不必要的数据结构副本或不释放文件句柄等资源会导致内存泄漏和效率低下。
# 坏
data = read_large_file()
process(data)
# 数据保留在内存中
# 好的
with open('large_file.txt') as file:
data = file.read()
process(data)
# 数据从内存中释放
-
不接受模块化
编写单一脚本而不将代码分解为可重复使用的函数或类,会使代码难以测试、调试和维护。
# 不好
def main():
# 单体脚本
# 好
def process_data(data):
# 模块化函数
if __name__ == '__main__':
main()
-
硬编码值
在代码中硬编码值会给维护和可扩展性带来挑战。请使用常量或配置文件:
# 不好
def calculate_area(radius):
return 3.14 * radius ** 2
# 好
PI = 3.14
def calculate_area(radius):
return PI * radius ** 2
-
忽略类型注解
忽略类型注解会导致意想不到的行为。使用注释可提高代码的可读性,并有助于捕捉与类型相关的错误:
# 不好
def add(a, b):
return a + b
# 好
def add(a: int, b: int) -> int:
return a + b
Python编程基础 I
触发某些条件或者说满足某些预先定义的条件后,立即执行的概念是条件和分支,它允许我们根据特定条件引导我们的程序执行不同的操作。
比较运算符
比较操作用于比较一个值或操作数,并基于条件生成一个布尔值。在比较两个值时,您可以使用以下运算符:
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
让我们给变量 a 赋值为 5。使用两个等于 == 符号表示等于运算符,以确定两个值是否相等。下面的案例将变量 a 与 6 进行比较。
# 等于条件
a = 5
a == 6
>>> False
我们可以将相同的方法应用于字符串。例如,我们可以在两个不同的字符串上使用等于运算符。由于这些字符串不相等,我们得到一个 False。
# 使用等于号比较字符串
"ACDC" == "Michael"
>>> False
# 使用不等于号比较字符串
"ACDC" != "Michael"
>>> True
分支
当根据不同的输入来控制代码流程时,分支是一个不错的选择。if 语句的作用类似于一个只在条件为真时才打开的锁定门。
然而,如果条件为假,程序将继续进行而不执行任务。这种简单但有效的方法允许您根据特定条件执行不同的语句。
我们可以使用之前学过的条件语句作为 if 语句中需要检查的条件。语法非常简单:
if 条件语句:
其中包含一个 if 单词、任何条件语句,并在末尾加上一个冒号。
在一个新行中以缩进开始需要在此条件下执行的任务。在冒号后面并且带有缩进的代码行仅在 if 语句为真时执行。当代码行不再包含缩进时,任务将结束。
让我们看一个具体的例子。
# 基本的 if 语句
x = 20
y = 5
# 可能为真或假的表达式
if x < y:
# 在缩进中,我们有在条件为真时运行的表达式
print("x 比 y 小")
# 在 if 语句之后的语句将无论条件是真还是假都会运行
print("继续进行")
x 比 y 小,继续进行
如果在 else 语句之前没有任何条件为真,则该语句将运行一块代码。
# else 语句
x = 3
y = 10
if x > y:
print("x 比 y 大")
else:
print("x 比 y 小")
print("继续进行")
>>> x 比 y 小
继续进行
elif 语句,即 else if 的缩写,允许我们在之前的条件语句为假时检查附加条件。
如果 elif 语句的条件为真,则将运行替代的表达式。考虑音乐会的例子,如果 x 和 y 相等会怎么样?
# 带有 elif 语句的 x 等于 y
x = 3
y = 3
if x < y:
print("x 比 y 小")
elif x == y:
print("x 等于 y")
else:
print("x 比 y 大")
x 等于 y
逻辑运算符
有时,您可能需要同时验证多个条件。例如,您可能希望确保两个不同的条件都为真。逻辑运算符使您能够混合或更改条件。
and
or
not
这些运算符在两个变量上使用以下真值表进行总结:
https://introcs.cs.princeton.edu/java/71boolean/
and 语句仅在两个条件都为真时为真。
or 语句在一个条件或两个条件都为真时为真。
not 语句输出相反的真值。
让我们看一个例子:
humidity = "low"
temperature = "low"
if humidity == "low" and temperature == "high":
print("这是一个炎热的沙漠")
elif humidity == "low" and temperature == "low":
print("这是一个北极沙漠")
elif humidity == "high" and temperature == "high":
print("这是一个热带森林")
else:
print("我不知道!")
>>> 这是一个北极沙漠
结论
在本文中,我们介绍了Python中的条件和分支的概念。在接下来的文章中,我们将深入探讨循环。
要成为一名精通 Python 的程序员,改掉不良的编码习惯至关重要。通过遵守 PEP 8 准则、使用描述性名称、记录代码并采用高效的实践如列表解析。
您将提高代码的可读性、可维护性和整体质量。解决这些常见的陷阱不仅能让你成为更好的 Python 程序员,还能为你和你的合作者带来更积极的编码体验。
本文由 mdnice 多平台发布