各位同学,今天咱们来聊聊 Python 里的 “代码说明书”—— 注释。咱先达成一个共识:代码是写给人看的,机器只是顺便能跑。就像你写日记不标日期,过俩月自己都忘了那天为啥 emo 一样,代码不加注释,过一周你可能会怀疑这是隔壁老王写的。
一、单行注释:# 号 —— 便利贴本贴
啥是单行注释?
用 # 开头的文字,Python 解释器会假装没看见。它的作用就像你在课本上画的波浪线、写的 “这里要考”—— 只给人看,不影响内容本身。
现实类比:
就像你在冰箱上贴的便利贴:“牛奶只剩半盒,下班买!” 冰箱(Python 解释器)不会因为这张纸就自己去买牛奶,但你(程序员)看到就知道该干啥了。
怎么用?看案例:
python
运行
# 这是一行单独的注释,解释下面要干啥
age = 18 # 这是行内注释,解释这个变量存的是年龄
# 计算一年有多少天(忽略闰年,简单粗暴版)
days_in_year = 365
print(days_in_year) # 输出结果:365
怎么运行?
- 打开记事本(或 PyCharm、VS Code 这些 IDE),复制上面的代码
- 保存为 single_line_comment.py(注意后缀必须是 .py)
- 打开命令提示符(Windows)或终端(Mac/Linux),输入:python single_line_comment.py
- 你会看到输出 365,而所有 # 后面的文字都被无视了 —— 这就是注释的精髓!
二、多行文档字符串:""" 或 ''' —— 产品说明书
啥是文档字符串?
用三个双引号 """ 或三个单引号 ''' 包裹的文字。它比单行注释 “高级”:不仅能当注释,还能被 Python “记住”,可以通过代码调用出来(比如生成文档、显示帮助信息)。
现实类比:
如果单行注释是便利贴,那文档字符串就是 产品说明书。比如你买个微波炉,便利贴可能写 “热饭按 10 分钟”,但说明书会详细写 “功率多少、怎么解冻、不能加热金属容器”—— 更系统、更规范。
文档字符串给谁用?
- 写代码的自己(过仨月忘了功能时救急)
- 用你代码的同事(不用追着你问 “这函数咋用啊”)
- 自动文档工具(比如 Sphinx,能把文档字符串转成 HTML 手册)
怎么用?看案例(多到让你过瘾)
案例 1:模块级文档字符串(整个.py 文件的说明)
python
运行
"""
模块名称:calculator.py
功能:提供简单的加减乘除运算
作者:编程大师(就是我)
版本:1.0
使用方法:
导入后直接调用函数,例如:
>>> add(2, 3)
5
"""
def add(a, b):
return a + b
def subtract(a, b):
return a - b
案例 2:函数文档字符串(最常用!)
python
运行
def divide(a, b):
"""
功能:计算两个数的除法
参数:
a (int/float):被除数,不能是字符串哦
b (int/float):除数,绝对不能为0!(不然给你抛异常)
返回值:
float:a除以b的结果
异常:
ZeroDivisionError:当b为0时触发
TypeError:当a或b不是数字时触发
示例:
>>> divide(10, 2)
5.0
>>> divide(7, 3)
2.3333333333333335
"""
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("被除数和除数必须是数字!")
if b == 0:
raise ZeroDivisionError("除数不能为0!想上天吗?")
return a / b
# 试试调用文档字符串
print("函数说明:", divide.__doc__) # __doc__是Python自带的属性,专门存文档字符串
print("用help看更清楚:")
help(divide) # help()函数会格式化显示文档字符串
案例 3:类和方法的文档字符串
python
运行
class Dog:
"""
类:Dog(狗)
功能:模拟一只狗的基本行为
属性:
name (str):狗的名字
age (int):狗的年龄(以岁为单位)
"""
def __init__(self, name, age):
"""
初始化Dog实例
参数:
name (str):给狗起个名字,比如"旺财"
age (int):狗的年龄,必须是正数(总不能是-3岁吧)
"""
self.name = name
self.age = age
def bark(self):
"""
狗叫一声
返回值:
str:"汪汪!我叫[名字],今年[年龄]岁啦!"
"""
return f"汪汪!我叫{self.name},今年{self.age}岁啦!"
# 测试一下
my_dog = Dog("旺财", 3)
print(my_dog.bark()) # 输出:汪汪!我叫旺财,今年3岁啦!
print("Dog类的说明:", Dog.__doc__) # 查看类文档
print("bark方法的说明:", Dog.bark.__doc__) # 查看方法文档
怎么运行这些案例?
- 把代码复制到记事本,保存为 docstring_demo.py
- 命令行输入 python docstring_demo.py
- 你会看到文档字符串被打印出来,help() 函数还会把格式整理得清清楚楚 —— 这就是文档字符串的 “魔法”!
三、单行# 和 多行 """ 的核心区别(划重点!)
特性 | 单行注释(#) | 文档字符串(""" 或 ''') |
被 Python 识别 | 完全无视(纯给人看) | 会被存在__doc__属性里(机器也能用) |
用途 | 临时说明、标注代码细节 | 系统说明(模块 / 函数 / 类的功能、参数等) |
长度 | 一般一行(换行要重新加 #) | 可跨多行(不用重复加符号) |
适用场景 | 代码里的 “碎碎念” | 给别人用的 “使用手册” |
四、灵魂拷问:啥时候用哪种注释?
- 如果你只是想写 “这里我用了个小技巧”“这个变量存的是用户 ID”—— 用 # 单行注释,简单粗暴。
- 如果你写了个函数 / 类,希望别人(包括未来的自己)知道 “这玩意是干啥的、怎么用、有啥坑”—— 必须用 """ 文档字符串,显得专业且贴心。
最后吐槽一句:别信 “好代码不需要注释” 这种鬼话。再牛的代码,过半年你自己看也得骂一句 “这谁写的啥玩意儿”。所以,注释该写就得写,就像炒菜要放盐 —— 适量就好,多了齁得慌,少了没味道。
赶紧打开你的 Python 文件,给代码加几句 “说明书” 吧!