导读:本期聚焦于长沙网站建设创作的《python注释有哪几种?单行注释、多行注释和文档字符串的用法详解》,敬请观看详情。注释是python代码中最基础也最容易被忽视的部分,写好注释能让代码可读性大幅提升。本文系统梳理python中注释的几种类型,包括最常见的井号单行注释、基于三引号的多行注释,以及用于生成帮助文档的文档字符串docstring。文章还会对比三引号字符串与真正注释的区别,说明为什么不推荐用三引号充当块注释,并介绍编码声明注释、shebang行、常用IDE快捷键以及编写注释的最佳实践,帮助你在团队协作中写出既规范又易懂的python代码。

刚接触python的人往往只会用井号写注释,遇到需要注释大段代码时就不知道该怎么办了。其实python的注释体系比想象中丰富,除了单行注释,还有多行注释的写法、专门用于文档说明的docstring,以及一些有特殊用途的声明式注释。搞清楚它们的区别和使用场景,是写出规范python代码的第一步。下面就来逐一讲解。

python注释有哪几种?单行注释、多行注释和文档字符串的用法详解

单行注释:井号是唯一的主角

python中真正意义上的注释只有一个符号,就是井号#。解释器遇到#后,会忽略该行从井号开始到行尾的所有内容,这些内容不会参与任何执行逻辑。这是python官方定义的唯一注释方式,无论什么场景,单行注释都必须以#开头。

单行注释有两种常见位置:一种是独占一行,写在代码上方,用来解释接下来这段代码的作用;另一种是写在代码行尾,与语句保持在同一行,用来补充说明。PEP 8规范建议,行尾注释与代码之间至少间隔两个空格,井号后也要有一个空格,例如x = x + 1 # 累加计数器这样的写法才是推荐的格式。

# 这是独占一行的注释,解释下面的函数作用
def calculate_area(radius):
    # 圆周率取近似值
    pi = 3.14159
    return pi * radius ** 2  # 行尾注释:计算圆的面积

需要特别注意的一点是,#只能注释一行。如果你用记事本打开别人的代码,看到大段被注释的内容,那并不是某种块注释语法,而是多行连续使用井号,或者借助了其他手段,这就引出了下一节的话题。

多行注释:三引号字符串的"伪装术"

很多教程会说python支持三引号多行注释,严格来讲这个说法并不准确。三引号('''""")包裹的内容其实是一个字符串表达式,它之所以看起来像注释,是因为这个字符串没有被赋值给任何变量,解释器会直接丢弃它,不产生任何副作用。

"""
这一整段看起来像注释
实际上是一个字符串字面量
解释器会创建它然后立即丢弃
"""
print("hello")

'''
用三个单引号也是同样的效果
'''

这种写法能起到注释的视觉效果,但它和井号注释有本质区别:井号注释在词法分析阶段就被丢弃,而三引号字符串是真实存在的对象,会占用内存,如果写在函数内部还会影响该函数的常量缓存。更重要的是,如果三引号字符串出现在函数、类或模块的第一个语句位置,它就不是注释了,而是docstring,会被解释器收集起来存入__doc__属性。

因此PEP 8明确建议:块注释应该用连续的井号书写,而不是依赖三引号字符串。临时注释掉一大段代码调试时可以偷懒用三引号,但如果被注释的代码里本身包含三引号字符串,就会导致语法错误,这也是它的一个隐藏陷阱。

文档字符串:python独有的注释体系

docstring是python中非常特殊的存在,它是写在模块、函数、类定义第一行的字符串,用三引号包裹,作用是描述这个对象的用途、参数和返回值。它与普通注释最大的区别在于它是可访问的运行时数据,可以通过__doc__属性或内置函数help()读取,很多文档生成工具比如Sphinx也是基于它来构建文档的。

def divide(a, b):
    """计算两个数相除的结果。

    参数:
        a: 被除数
        b: 除数,不能为零

    返回:
        a 除以 b 的商

    异常:
        ZeroDivisionError: 当 b 为零时抛出
    """
    if b == 0:
        raise ZeroDivisionError("除数不能为零")
    return a / b

# 通过 __doc__ 属性访问文档字符串
print(divide.__doc__)
# 调用 help 函数查看格式化后的帮助信息
help(divide)

按照惯例,模块级docstring写在文件最开头,说明整个模块的功能;函数和类的docstring写在其定义的第一行,用一句话概括功能,必要时再展开参数说明。业界有Google风格、NumPy风格等多种书写格式,团队协作时统一采用一种即可。docstring写得好,IDE的悬停提示就能直接展示函数说明,调用者不需要翻源码。

两种有特殊用途的声明式注释

除了普通注释,还有两类写在文件开头的井号注释具有特殊功能,容易被初学者忽略。第一类是编码声明,写在python文件的第一行或第二行,格式如# -*- coding: utf-8 -*-,用于告诉解释器该源文件使用的字符编码。python 3默认源文件编码就是utf-8,所以现在很少需要显式声明,但在维护一些老项目或处理特殊编码文件时仍会见到。

第二类是shebang行,也叫解释器指令,写作#!/usr/bin/env python3。它用在类Unix系统上,当脚本被赋予可执行权限后,系统内核会根据这一行自动找到python解释器来执行脚本。env python3的写法比硬编码路径更通用,因为它会去环境变量PATH中查找解释器位置,避免不同机器安装路径不一致导致脚本无法运行。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""这个文件同时演示了 shebang 行和编码声明"""

if __name__ == "__main__":
    print("特殊注释行示例")

这两行的顺序也有讲究:shebang必须是第一行,否则不会被系统识别;编码声明可以紧跟其后放在第二行。在Windows上shebang虽然不生效,但保留它不影响运行,也便于脚本跨平台使用。

编写注释的实用技巧与建议

知道了注释的种类,还要知道怎么用好它们。首先遵循一个原则:注释解释为什么这么做,而不是复述代码做了什么。像i += 1 # i加1这种注释毫无价值,而# 兼容旧接口,v2版本会移除这样的注释能传达代码之外的关键信息。过时的注释比没有注释更可怕,修改代码时记得同步更新注释。

其次善用工具能大幅提升效率。主流编辑器都提供了注释快捷键,比如PyCharm和VS Code中都用Ctrl+/code>切换行注释,选中多行后一键批量添加或取消井号,比手动敲三引号规范得多。版本控制工具也提供了替代方案,如果只是想临时停用一段代码,用git分支管理往往比堆注释更干净。

最后把握一个度:注释不是越多越好。函数命名清晰、结构简单的代码本身就具有自解释性,这时候强行加注释反而显得冗余。把详细的参数说明交给docstring,把设计决策交给块注释,把琐碎的临时说明在提交代码前清理掉,这样的注释习惯才能让代码在半年后依然容易维护。

python注释python多行注释python文档字符串修改时间:2026-09-15 22:38:50

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260915/57543.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。