本文目录导读:

- 单行注释 (Single-line Comments)
- 多行注释 (Multi-line Comments)
- 文档字符串 (Docstrings) - 最推荐的方式
- 模块注释
- 类注释
- 常用的文档字符串格式
- 实战案例:完整的注释规范
- 注释规范最佳实践
- 生成文档的工具
在Python中编写规范注释非常重要,它能提高代码的可读性和可维护性,以下是几种常见的注释规范方式和最佳实践:
单行注释 (Single-line Comments)
# 这是单行注释,用于解释单行代码
x = 10 # 也可以在代码后面添加注释
# 通常用于简单的说明
def calculate_total():
# 初始化总和为0
total = 0
# 循环添加商品价格
for price in prices:
total += price
return total
多行注释 (Multi-line Comments)
# 方法1:使用多个单行注释 # 这是一个多行注释 # 用于解释复杂的逻辑 # 建议每行不要过长 # 方法2:使用三引号(通常用于文档字符串) """ 这也是多行注释的一种方式 通常用作文档字符串 """
文档字符串 (Docstrings) - 最推荐的方式
文档字符串是Python中最规范的注释方式,使用三引号 或 。
单行文档字符串
def add(a, b):
"""返回两个数的和"""
return a + b
多行文档字符串(PEP 257标准)
def calculate_bmi(weight, height):
"""
计算BMI指数
参数:
weight (float): 体重,单位公斤
height (float): 身高,单位米
返回:
float: BMI指数,保留两位小数
示例:
>>> calculate_bmi(70, 1.75)
22.86
"""
bmi = weight / (height ** 2)
return round(bmi, 2)
模块注释
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 计算器模块 提供基本的数学运算功能,包括加减乘除。 支持整数和浮点数运算。 作者: Zhang San 日期: 2024-01-15 版本: 1.0.0 """ # ... 模块代码
类注释
class BankAccount:
"""
银行账户类
管理用户的银行存款操作,包括存款、取款和查询余额。
属性:
account_holder (str): 账户持有人姓名
balance (float): 当前账户余额
方法:
deposit(amount): 存款
withdraw(amount): 取款
get_balance(): 获取余额
"""
def __init__(self, account_holder, initial_balance=0.0):
"""
初始化银行账户
参数:
account_holder (str): 账户持有人姓名
initial_balance (float): 初始余额,默认为0
"""
self.account_holder = account_holder
self.balance = initial_balance
def deposit(self, amount):
"""
存款操作
参数:
amount (float): 存款金额,必须大于0
返回:
float: 存款后的余额
异常:
ValueError: 当金额小于等于0时抛出
"""
if amount <= 0:
raise ValueError("存款金额必须大于0")
self.balance += amount
return self.balance
常用的文档字符串格式
Google风格(推荐)
def get_user_info(user_id):
"""
获取用户信息
Args:
user_id (int): 用户ID
Returns:
dict: 包含用户信息的字典,包括:
- name: 用户名
- email: 邮箱
- age: 年龄
Raises:
ValueError: 如果用户ID无效
ConnectionError: 如果数据库连接失败
"""
pass
NumPy/SciPy风格
def calculate_statistics(data):
"""
计算数据的统计信息
Parameters
----------
data : list or numpy.ndarray
输入数据,需要是数值类型
Returns
-------
dict
包含以下统计信息的字典:
- mean: 平均值
- median: 中位数
- std: 标准差
"""
pass
实战案例:完整的注释规范
#!/usr/bin/env python3
"""
学生成绩管理系统
本模块提供学生成绩的录入、查询和统计分析功能。
支持多种评分标准和成绩分布计算。
作者: Li Si
日期: 2024-01-20
版本: 1.0.1
"""
import statistics
from typing import List, Dict, Optional
class StudentGradeSystem:
"""
学生成绩管理系统类
管理学生的考试成绩,提供成绩分析和报告功能。
属性:
students (Dict[int, str]): 存储学生ID和姓名的字典
grades (Dict[int, List[float]]): 存储学生ID和成绩列表的字典
示例:
>>> system = StudentGradeSystem()
>>> system.add_student(1, "Alice")
>>> system.add_grade(1, 85.5)
>>> system.get_student_avg(1)
85.5
"""
def __init__(self):
"""初始化学生成绩管理系统"""
self.students: Dict[int, str] = {}
self.grades: Dict[int, List[float]] = {}
def add_student(self, student_id: int, name: str) -> bool:
"""
添加新学生
将新学生添加到系统中,如果学生ID已存在则返回False。
参数:
student_id (int): 学生唯一标识ID
name (str): 学生姓名
返回:
bool: 添加成功返回True,学生已存在返回False
示例:
>>> system = StudentGradeSystem()
>>> system.add_student(1, "Alice")
True
>>> system.add_student(1, "Bob") # ID重复
False
"""
if student_id in self.students:
return False
self.students[student_id] = name
self.grades[student_id] = []
return True
def add_grade(self, student_id: int, score: float) -> Optional[float]:
"""
添加学生成绩
为学生添加新的考试成绩,成绩必须在0-100之间。
参数:
student_id (int): 学生ID
score (float): 考试成绩(0-100)
返回:
Optional[float]: 添加成功返回平均分,失败返回None
异常:
ValueError: 当成绩不在0-100范围时抛出
"""
# 验证学生是否存在
if student_id not in self.students:
return None
# 验证成绩范围
if not 0 <= score <= 100:
raise ValueError("成绩必须在0-100之间")
# 添加成绩
self.grades[student_id].append(score)
# 返回平均分
return statistics.mean(self.grades[student_id])
def get_class_average(self) -> float:
"""
计算全班平均分
计算所有学生所有成绩的总平均分。
如果没有学生或成绩,返回0。
返回:
float: 全班平均分
"""
all_grades = []
for grade_list in self.grades.values():
all_grades.extend(grade_list)
if not all_grades:
return 0.0
return statistics.mean(all_grades)
# 使用示例
if __name__ == "__main__":
"""
主程序入口
演示StudentGradeSystem的基本使用方法
"""
system = StudentGradeSystem()
# 添加学生
system.add_student(1, "张三")
system.add_student(2, "李四")
# 添加成绩
system.add_grade(1, 85)
system.add_grade(1, 92)
system.add_grade(2, 78)
# 计算全班平均分
avg = system.get_class_average()
print(f"全班平均分: {avg:.2f}")
注释规范最佳实践
✅ 应该做的:
- 保持注释简洁清晰
- 使用文档字符串为公共API编写文档
- 注释"为什么这样做",而不是"做了什么"
- 及时更新注释,保持与代码一致
- 为复杂的算法添加注释说明
- 使用类型提示(Type Hints)提高可读性
❌ 避免做的:
# 不好的注释 - 解释显而易见的代码 x = x + 1 # 将x加1 # 多余的注释 a = 5 # 设置a为5 b = 10 # 设置b为10 # 过时的注释 # 这是旧版本的处理方式 # def old_function(): # pass
生成文档的工具
使用规范的文档字符串后,可以用工具自动生成文档:
# 使用pydoc查看文档 pydoc your_module.py # 使用Sphinx生成HTML文档 sphinx-quickstart
遵循这些规范,你的代码将更易于理解、维护和分享。好的注释应该是解释"为什么",而不是重复"是什么"。