Tchaikov’s Journal

July 9, 2006

为什么 Python 没有 /* */

Filed under: Python

熟悉一门计算机编程语言的朋友,在学习新的编程语言时,都会自觉或不自觉地希望在新的语言中找到原来那门语言中对应的元素。很自然地,学过 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++是“//”)开头的,来判断这一行是不是注释。

    看完两边的发言。掩卷沉思。有两个结论:

    1. 嗯,C++ 引入“//”的确是有它的理由啊。
    2. 生子当如孙仲谋,写程序当用 Emacs/VIM。
    附带着说一句,Emacs 里 python-mode 的缩进可以用 C-c > 和 C-c < 来成块地控制。

    4 Comments »

    The URI to TrackBack this entry is: http://tchaikov.blogsome.com/2006/07/09/p44/trackback/

    1. 其實好的Python IDE可以直接利用 Ctrl+/ 就可以把
      選擇起來的一個Block全部加上 #
      利用 Ctrl+Shift+/
      就可以將選擇起來的Block消除 #
      非常簡單好用 (WingIDE有此功能)

      Comment by bohachu — July 10, 2006 @ 3:00 am

    2. 用了Emacs,很多问题也就不是问题了。呵呵。

      Comment by netcasper — July 11, 2006 @ 5:02 am

    3. 似乎Emacs和VIM谁优谁劣的争吵也一直在继续

      Comment by Morgan Cheng — January 10, 2008 @ 8:26 am

    4. @Morgan Cheng,
      我觉得,这个与其说是孰优孰劣的争论,不如说是宗教信仰上的分歧。:)

      Comment by Administrator — January 10, 2008 @ 11:45 am

    RSS feed for comments on this post.

    Leave a comment

    Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


    Get free blog up and running in minutes with Blogsome
    Theme designed by Jay of onefinejay.com