熟悉一门计算机编程语言的朋友,在学习新的编程语言时,都会自觉或不自觉地希望在新的语言中找到原来那门语言中对应的元素。很自然地,学过 C 的同学,在看待 Python 时,也会这样做。
初看之下,Python 里缺少块注释(block comment)。Python 语言里用#来标志一行里,注释的开始。如果要多行注释?这简单,每一行都用“#”打头不就得了。
有的朋友就感到很困惑,有的朋友觉得这样很累,这几篇 post 已经有好几年历史了。但是,由它带出的一些思考在今天还是有它的意义的。thread 中的发言可以分作两派:
- 一派就事论事,提供了一些不错的解决办法
- 用“#”注释 code block 的每一行
- 把 code block 放在
if 0: ...的缩进块里 - 用
”“”或者'''的 triple quotes 把要注释的代码包起来。不过这种办法必须要注意 triple quotes 的缩进,必须服从上下文。另外,被注释的代码不能含有 triple quote(s)。 - 因为任何像样的编辑器都应该有块注释的功能。就算它没有,也应该能够进行配置,使它能容易地帮助用户加入希望的注释标记。Emacs: C-c # 就是块注释,C-u C-c # 就是取消块注释
- vim 也有很多办法,可以帮我们注释大块的代码。用 google 大仙能找到大把的方案。
- 如果使用“/**/”来注释大块的源程序,对于浏览代码的程序员来说,看到一行代码就无法快速的知道,这行代码到底是不是注释,只能让程序员“上下而求索”了。不过这个问题对于有良好的语法着色的编辑器来说是不成问题的。
- 而且“/**/“没有办法包含另一个”/**/“ block。相信大家在写 C++程序的时候肯定碰到过很多这种情况吧。因为里面的“*/“会和外面的”/*“配对,使里面的“*/”之后的代码没有被注释起来。
- 而且,对于各种没有语法分析功能的文本分析程序(比如 grep,简单的 perl 程序)来说,“/**/”的出现对他们统计和处理代码都带来了挑战。它们无法仅仅根据一行是不是“#”(对于C/C++是“//”)开头的,来判断这一行是不是注释。
看完两边的发言。掩卷沉思。有两个结论:
- 嗯,C++ 引入“//”的确是有它的理由啊。
- 生子当如孙仲谋,写程序当用 Emacs/VIM。
