写出功能正确的 Python 代码是每个开发者的基本要求,但要写出高质量、易于维护和扩展的代码,则是开发者不断追求的目标。今天分享 7 个实用的 Python 代码重构技巧,帮助你提升代码质量。
- 提取重复代码为函数
重复的代码不仅会增加文件的长度,还可能导致未来修改时出现不一致。将重复代码提取成函数,可以提高代码的复用性和可维护性。
# 重构前
def save_admin(user):
admin_data = {
'name': user.name,
'email': user.email,
'role': user.role
}
save_to_db(admin_data)
def save_manager(user):
manager_data = {
'name': user.name,
'email': user.email,
'role': user.role
}
save_to_db(manager_data)
# 重构后
def extract_user_data(user):
return {
'name': user.name,
'email': user.email,
'role': user.role
}
def save_user(user):
user_data = extract_user_data(user)
save_to_db(user_data)
- 使用字典解构简化参数处理
如果函数有多个参数,使用字典解构可以提高可读性,并减少参数变化带来的修改。
# 重构前
def create_user(first_name, last_name, age, email, address, phone):
pass
# 重构后
def create_user(user_info):
first_name = user_info['first_name']
last_name = user_info['last_name']
age = user_info['age']
email = user_info['email']
address = user_info['address']
phone = user_info['phone']
- 使用早期返回减少嵌套
通过提前返回,可以避免复杂的嵌套,提高代码清晰度。
# 重构前
def process_user(user):
if user.is_active:
if user.is_admin:
# 处理管理员
pass
else:
# 处理普通用户
pass
else:
# 处理非活跃用户
pass
# 重构后
def process_user(user):
if not user.is_active:
return "User is not active."
if user.is_admin:
return "Process admin."
return "Process regular user."
- 使用常量替代魔术字符串
使用常量代替硬编码的字符串,可以减少出错几率并提高代码的可维护性。
# 重构前
def assign_role(user):
if user.role == "admin":
pass
elif user.role == "manager":
pass
# 重构后
ROLE_ADMIN = "admin"
ROLE_MANAGER = "manager"
def assign_role(user):
if user.role == ROLE_ADMIN:
pass
elif user.role == ROLE_MANAGER:
pass
- 遵循职责单一原则
每个函数应该只做一件事。遵守这一原则可以使代码更简洁,测试更容易。
# 重构前
def process_order(order):
# 验证订单
validate_order(order)
# 计算总价
total = calculate_total(order)
# 处理支付
handle_payment(order, total)
# 重构后
def validate_order(order):
pass
def calculate_total(order):
return 100
def handle_payment(order, total):
pass
- 使用小函数组合代替复杂方法
如果函数过于复杂,可以将其拆分为多个小函数,然后通过组合它们来完成复杂的任务。
# 重构前
def send_email(user, message):
# 连接到SMTP服务器
# 发送邮件
# 记录日志
# 重构后
def connect_smtp():
pass
def send_email_to_user(user, message):
pass
def log_email_sent(user, message):
pass
def send_email(user, message):
connect_smtp()
send_email_to_user(user, message)
log_email_sent(user, message)
- 使用条件表达式简化逻辑
对于简单的条件判断,可以使用条件表达式来简化代码。
# 重构前
def get_discount(is_member):
if is_member:
return 10
else:
return 5
# 重构后
def get_discount(is_member):
return 10 if is_member else 5
通过这些技巧,可以提升 Python 代码的质量,使其更易于理解、维护和扩展。