代码之家  ›  专栏  ›  技术社区  ›  Keet

在Python中,块之前的冒号的用途是什么?

  •  65
  • Keet  · 技术社区  · 16 年前

    在Python中,块之前的冒号的用途是什么?

    例子:

    if n == 0:
        print "The end"
    
    5 回复  |  直到 6 年前
        1
  •  71
  •   poke    8 年前

    冒号用于声明缩进块的开头。

    从技术上讲,这是不必要的;您可以在块完成后进行缩进和去缩进。但是,基于 Python koan _156;explicit is better than implicit_(eibti),I think that guido刻意使冒号成为必须的,so 任何 声明说 应该 后面是以冒号结尾的缩进代码。(如果在冒号后继续,它还允许使用一行,但这种样式的使用并不广泛。)

    它还使支持语法的自动缩进编辑器的工作变得更容易,这也算在决策中。


    这个问题原来是 Python FAQ 我找到了其中一个答案 here :

    为什么if/while/def/class语句需要冒号?

    冒号主要是为了提高可读性(实验ABC语言的结果之一)。考虑一下:

    if a == b 
        print a
    

    对战

    if a == b: 
        print a
    

    注意第二个更容易阅读。请进一步注意冒号是如何在这个常见问题解答中触发示例的;它是英语中的标准用法。

    另一个次要原因是冒号使语法突出显示的编辑器更加容易;他们可以查找冒号来决定何时需要增加缩进,而不必对程序文本进行更详细的分析。

        2
  •  23
  •   Yoo    15 年前

    考虑下表的东西从杂货店购买,写在pewprikanese。

    pewkah
    lalala
        chunkykachoo
        pewpewpew
    skunkybacon
    

    当我读到这篇文章时,我很困惑,Chunkykachoo和Pewpeww是一种拉拉拉吗?或者,如果Chunkykachoo和Pewpeww只是因为它们是特殊的项目而缩进呢?

    现在看看当我的pewprikanese朋友添加冒号以帮助我更好地分析列表时会发生什么:(<--如下所示)

    pewkah
    lalala:   (<-- see this colon)
        chunkykachoo
        pewpewpew
    skunkybacon
    

    现在很明显,Chunkykachoo和Pewpeww是一种拉拉拉。

    比如说,有个人开始学习Python,这恰好是她第一次学习编程语言。如果没有冒号,她很有可能会一直在想“这行缩进,因为这行像特殊的项目。”,可能需要一段时间才能意识到这不是思考缩进的最佳方式。

        3
  •  15
  •   Ryan    16 年前

    三个原因:

    1. 增加可读性。冒号有助于代码流入下面的缩进块。
    2. 为了帮助文本编辑器/IDE,如果前一行以冒号结尾,它们可以自动缩进下一行。
    3. 使用python解析稍微容易一些。
        4
  •  5
  •   unwind    14 年前

    据我所知,这是一个故意设计,使它更明显,读者应该期望在冒号后面有一个缩进。

    它还使这样的构造成为可能:

    if expression: action()
    code_continues()
    

    请注意(正如一位评论者所做的那样),这并不完全是优秀的Python风格的金光闪闪的标准。最好是有一个空白,那里:

    if expression: action()
    
    code_continues()
    

    以避免混淆。我只是想用第一个例子说明,这样写是可能的,因为有了 if 紧跟冒号之后,编译器就可以理解下一行应该 缩进。

        5
  •  0
  •   Serge    6 年前

    根据python的发明家guido van rossum的说法,使用冒号使结构更加明显的想法是受到了早期对python的前身abc语言的实验的启发,abc语言也是针对初学者的。显然,在早期的测试中,初学者使用冒号比不使用冒号进步得更快。在吉多的巨蟒历史博客上阅读整个故事。

    http://python-history.blogspot.com/2009/02/early-language-design-and-development.html

    是的,冒号在一行程序中很有用,比分号更不烦人。另外,只有当以二进制运算符结尾时,才在多行上使用长时间建议分隔符的样式指南

    x = (23 + 
         24 + 
         33)
    

    添加冒号使得复合语句的样式更加一致。

    CPython有一个“无冒号”编码,也有一个无冒号的方言,叫做cobra。那些都没有捡起来。