- Published on
2.10.注释
- Authors

- Name
- xiaobai
1.什么是注释?
注释是代码中不会被 Python 解释器执行的文本,用于:
- 解释代码:说明代码的功能和目的
- 临时禁用代码:调试时暂时不让某些代码执行
- 提高可读性:让其他人(包括未来的你)更容易理解代码
2.注释的类型
2.1.1. 单行注释
使用 # 符号,从 # 开始到行尾的内容都是注释。
# 这是一个单行注释
print("Hello, World!") # 这是在行尾的注释
# 下面这行代码被注释掉了,不会执行
# print("这行代码不会运行")
2.2.多行注释(块注释)
Python 没有专门的多行注释语法,但有两种实现方式:
方式一:使用多个 #
# 这是一个多行注释
# 每行前面都加上 # 号
# 这是第三行注释
print("多行注释示例")
方式二:使用三引号(实际上是字符串,但可作为注释使用)
"""
这是一个多行注释
使用三个双引号包围
可以写很多行内容
"""
print("三引号注释示例")
'''
也可以使用三个单引号
效果是一样的
'''
3.注释的最佳实践
3.1.解释"为什么"而不是"是什么"
好的注释解释代码的意图和原因,而不是重复代码本身。
# 不好的注释(重复代码)
x = x + 1 # 给x加1
# 好的注释(解释原因)
x = x + 1 # 补偿数组的0-based索引偏移
3.2.复杂的算法需要详细注释
def calculate_compound_interest(principal, rate, time):
"""
计算复利
参数:
principal (float): 本金
rate (float): 年利率(如0.05表示5%)
time (float): 时间(年)
返回:
float: 复利计算后的总金额
"""
# 复利公式: A = P(1 + r)^t
amount = principal * (1 + rate) ** time
return amount
3.3.函数和类的文档字符串
使用三引号为函数、类、模块添加文档说明。
class BankAccount:
"""银行账户类,用于管理个人银行账户操作"""
def __init__(self, account_holder, balance=0):
"""
初始化银行账户
参数:
account_holder (str): 账户持有人姓名
balance (float): 初始余额,默认为0
"""
self.account_holder = account_holder
self.balance = balance
def deposit(self, amount):
"""存款操作"""
if amount > 0:
self.balance += amount
return True
return False
4.以下内容不用看,Python全部学完后再看
5.注释的实际应用场景
5.1.调试时临时禁用代码
def complex_calculation(a, b, c):
# 暂时禁用某些计算以便调试
# result = a * b * c
# intermediate = result / 2
# 使用简化版本进行测试
result = a + b + c
return result
# print("调试信息") # 临时注释掉调试输出
5.2.解释复杂逻辑
def is_leap_year(year):
"""
判断是否为闰年
规则:
1. 能被4整除但不能被100整除的是闰年
2. 能被400整除的也是闰年
"""
# 使用布尔逻辑实现闰年判断规则
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
5.3.标记待办事项
# TODO: 优化这个函数的性能
def slow_function():
# 当前实现
pass
# FIXME: 这里有个边界情况需要处理
def buggy_function():
pass
# HACK: 临时解决方案,需要重构
def temporary_solution():
pass
6.访问文档字符串
文档字符串可以通过 __doc__ 属性或 help() 函数访问。
def example_function():
"""这是一个示例函数的文档字符串"""
pass
# 访问文档字符串
print(example_function.__doc__)
# 输出: 这是一个示例函数的文档字符串
# 使用help函数
help(example_function)
# 输出详细的帮助信息
7.注释的常见误用
7.1.过度注释
# 不好的例子:注释太啰嗦
x = 5 # 把x设为5
y = 10 # 把y设为10
z = x + y # 计算x加y的和
7.2.过时的注释
# 计算圆的面积(已过时)
# 原来的公式: area = 3.14 * radius * radius
area = math.pi * radius ** 2 # 代码已更新但注释没更新
7.3.无意义的注释
# 初始化变量
x = 0
# 开始循环
for i in range(10):
# 打印i
print(i)
8.实用的注释模式
8.1.文件头注释
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
文件名: data_processor.py
作者: 张三
创建日期: 2024-01-15
描述: 数据处理模块,用于清洗和分析用户数据
版本: 1.0
"""
8.2.章节分隔注释
# ==================== 配置部分 ====================
DATABASE_URL = "sqlite:///example.db"
MAX_CONNECTIONS = 10
# ==================== 工具函数 ====================
def connect_database():
"""连接数据库"""
pass
# ==================== 主逻辑 ====================
def main():
"""主函数"""
pass
8.3.调试注释
def process_data(data):
"""
处理数据的主函数
DEBUG INFO:
- 输入数据格式: List[Dict]
- 输出数据格式: pandas.DataFrame
- 处理时间: 通常 < 1秒 (1000条记录)
"""
# 临时调试输出
# print(f"处理数据长度: {len(data)}")
# print(f"数据类型: {type(data)}")
# 实际处理逻辑
processed_data = [item for item in data if item.get('active')]
return processed_data
9.注释与代码质量
良好的注释习惯能显著提高代码质量:
# 没有注释的代码(难以理解)
def f(a, b):
return a if a > b else b
# 有注释的代码(清晰易懂)
def find_maximum(value1, value2):
"""
返回两个值中的较大值
参数:
value1: 第一个值
value2: 第二个值
返回:
两个值中较大的那个
"""
return value1 if value1 > value2 else value2
10.总结
- 单行注释:使用
#多行注释:使用多个#或三引号 - 文档字符串:使用三引号为函数、类添加正式文档
- 注释原则:解释"为什么"而不是"是什么"
- 实用场景:调试、复杂逻辑解释、待办事项标记
- 避免:过度注释、过时注释、无意义注释

