关于编程语言中的注释,其重要性基本上已为大家所共识。

然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。

注释符通常可分为两种,即行注释与块注释(inline/block),它们在不同的编程语言中的符号可谓让人眼花缭乱。

比如行注释符,它至少有以下的 17 种之多(出自维基百科):

其中两个最大的阵营分别是“//”与“#”号:

// 注释符:ActionScript, C (C99), C++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, SASS, Swift, Xojo

# 注释符:Bourne shell and other UNIX shells, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, Make, Maple, Elixir, Nim

那么,**Python 为什么用“#”号作注释符,而不是“//”呢? **

这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,因为它们基本上没有区别。

我没有找到官方的解释,但是从这些注释符的阵营中,已经不难得出一个较为合理的解释:

// 注释符基本上被 C 语言家族所用

# 注释符则基本上是被 Shell 和其它脚本语言所用

Python 在创造之初,从 C 和 Shell 语言中借鉴了不少东西,但它是一种脚本语言,因此在注释符这个最为基础的语言要素上,就偏向了脚本语言的传统。

在某些“类脚本语言”中,比如 yaml、conf 和 ini 等格式的配置文件,它们大多也是采用脚本语言的“#”号作为注释符。

所以,Python 行内注释符的选择,大概可以归结为一种历史原因,即借鉴了 Shell 脚本语言的写法。

相比于行注释符的多样,块注释符更加是让人眼花缭乱:

大多数写法是我从未见过的,有些甚至是难以忍受的,槽点太多!

在这份表格里,我们看不到 Python,因为从严格意义上讲,Python 并没有块注释符!

一般而言,我们在连续的每行内容前面加“#”号,达到块注释的效果。块注释被看作是多个行注释。

PEP-8 中是这么建议的:

Each line of a block comment starts with a # and a single space (unless it is indented text inside the comment).

有人曾在 Twitter 上发问,为什么 Python 没有块注释符?

Guido 回复称,可以将多行字符串用作块注释:

Python 的多行字符串用三对单引号或双引号表示,它还可以用作文档字符串(即Documentation Strings,简写docstrings)。

但是,将它当做多行注释符使用,在语义上则有点怪怪的——它表示的是一段字符串,虽然没有赋值给变量,不会生成代码,但是它并非语义上的注释。

由于脚本语言的特性,它允许我们写一段“无根的字符串”,在语法上没有问题,也没有负作用(negative effects),但是,如果把它作为注释使用,这就是一种副作用(side effects)了。

从这点上考虑,我虽然不反对有人把多行字符串写法用作块注释,但是我会更推荐大家使用“#”号作注释。

另外,对于无用的代码,最好的做法就是直接删除,如果后续发现有需要,再回退修改。详细的多行注释尽量放在文档字符串中,这样在核心代码中就会很少出现多行注释的情况了。

对于 Python 的注释符用法,大家是怎么想的呢?欢迎留言交流。

如果你觉得本文分析得不错,那你应该会喜欢这些文章:

写在最后:本文属于“Python为什么”系列(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python 的迷人魅力。若你有其它感兴趣的话题,欢迎填在《Python的十万个为什么? 》里的调查问卷中。部分话题会推出视频版,请在 B 站收看,观看地址:视频地址

公众号【Python猫】, 本号连载优质的系列文章,有Python为什么系列、喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写作、优质英文推荐与翻译等等,欢迎关注哦。

python的注释符严格说来只有一种,Python 为什么用 # 号作注释符?相关推荐

  1. Python 为什么用 # 号作注释符?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:豌豆花下猫 来源:Python猫 关于编程语言中的注释,其重 ...

  2. python为什么用号做注释符_Python为什么用#号作注释符?

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > 关于编程语言中的注释,其重要性基本上已为大家所共识. 很多人学习py ...

  3. python多行注释符号_涨知识Python 为什么用 # 号作注释符?

    - START -关于编程语言中的注释,其重要性基本上已为大家所共识.然而关于注释的规范,这个话题就像我们之前聊过的缩进.终止符和命名方式一样,众口难调.注释符通常可分为两种,即行注释与块注释(inl ...

  4. python语言的注释语句引导符_Python 为什么用 # 号作注释符?

    关于编程语言中的注释,其重要性基本上已为大家所共识. 然而关于注释的规范,这个话题就像我们之前聊过的缩进.终止符和命名方式一样,众口难调. 注释符通常可分为两种,即行注释与块注释(inline/blo ...

  5. python为什么用号做注释符_Python 为什么用 # 号作注释符?

    关于编程语言中的注释,其重要性基本上已为大家所共识. 然而关于注释的规范,这个话题就像我们之前聊过的缩进.终止符和命名方式一样,众口难调. 注释符通常可分为两种,即行注释与块注释(inline/blo ...

  6. python各个解释器的用途-常用的五种Python解释器|老男孩网络Python学习课程

    Python是一门解释器语言,代码想运行,必须通过解释器执行,Python存在多种解释器,分别基于不同语言开发,每个解释器有不同的特点,但都能正常运行Python代码,以下是常用的五种Python解释 ...

  7. python的多行语句可以使用反斜杠_python 为什么不用分号作终止符?

    作者:豌豆花下猫 来源:Python猫 一般而言,编程语言中使用分号";"来实现两种目的: 作为语句分隔符:使用分号来分隔语句(statement),这样就能在一行代码中书写多条语 ...

  8. python 路径格式化_吐血整理!140种Python标准库、第三方库和外部工具都有了!...

    导读: Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据 ...

  9. python链表翻转_反转链表(两种Python解法)

    题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你 ...

最新文章

  1. php 随机在文章中添加锚文本_seo网站优化技巧之:8种优质锚文本的做法
  2. 科大星云诗社动态20210411
  3. 温控窗帘系统制作文档
  4. 【Verilog语法】PC-relatve branch 以及 Delay Slot 的含义
  5. DBeaverEE 21.1.0安装指南
  6. SPC控制图的样品子组大小为什么建议4或者5
  7. Mysql 5.5的编译安装 在ubuntu 10平台上面
  8. 【51Nod - 1416】两点 (dfs 或 并查集+dfs)
  9. JVM—类加载器和双亲委派模型
  10. 微软虚拟化技术——构建高效开发与测试环境
  11. 如何排查Java内存泄露(内附各种排查工具介绍)
  12. php解决01背包问题,PHP动态规划解决0-1背包问题实例分析_PHP教程
  13. show,hide与fadeIn、fadeOu的区别
  14. Java Swing线程之SwingUtilities.invokeLater解释
  15. charles抓包工具使用及手机抓包教程
  16. 专门查英语单词的软件_查英语单词的工具
  17. LaTeX Beamer 制作PPT时给某一页添加背景图片(并设置透明度)
  18. 南师大GIS考研数据库2018年第三题
  19. POTN——新时代网络融合的必经之路
  20. 三步搞定ABAP DOI操作EXCEL

热门文章

  1. 【BZOJ3039】玉蟾宫 单调栈
  2. 一个简单的基于连接的端口扫描器
  3. debian的bt下载工具
  4. 人为什么要辛苦赚钱,心得体会!
  5. SSH CA User Key实验
  6. 用unity和php实现一个排行榜功能(unity客户端篇)
  7. 视频倍速播放(视频倍速率来加速播放音视频文件)
  8. php获取当前周的起止日期,PHP获取一年有多少周和每周开始和结束日期
  9. java编写打印沙漏_打印沙漏编程总结
  10. python中符号 ~ 的意义和用法