在Python中的块之前冒号的目的是什么?

时间:2008-10-18 21:18:47

标签: python syntax

Python中块之前冒号的目的是什么?

示例:

if n == 0:
    print "The end"

5 个答案:

答案 0 :(得分:71)

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

从技术上讲,没有必要;你可以在块完成时缩进和缩进。但是,根据Python koan“明确比隐含更好”(EIBTI),我相信Guido故意使冒号成为强制性的,所以 应该的任何陈述后跟缩进的代码以冒号结尾。 (如果你在冒号之后继续,它也允许单行,但这种风格没有广泛使用。)

它还使语法感知自动缩进编辑器的工作更容易,这也决定了。


这个问题原来是Python FAQ,我在Guido here找到了答案之一:

  

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

     

结肠需要主要是为了增强可读性(实验性ABC语言的结果之一)。考虑一下:

if a == b 
    print a
     

if a == b: 
    print a
     

注意第二个如何更容易阅读。请进一步注意冒号如何引用此FAQ答案中的示例;这是英语的标准用法。

     

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

答案 1 :(得分:23)

考虑以下从杂货店购买的东西清单,用Pewprikanese写的。

pewkah
lalala
    chunkykachoo
    pewpewpew
skunkybacon

当我读到这篇文章时,我很困惑,chunkykachoo和pewpewpew是一种lalala?或者如果chunkykachoo和pewpewpew因为它们是特殊物品而缩进呢?

现在看看当我的Pewprikanese朋友添加冒号以帮助我更好地解析列表时会发生什么:(< - like this)

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

现在很明显chunkykachoo和pewpewpew是一种lalala。

假设有一个人开始学习Python,这恰好是她学习的第一门编程语言。没有冒号,她很可能会继续思考“这条线是缩进的,因为这条线就像特殊物品一样。”,并且可能需要一段时间才能意识到这不是考虑缩进的最佳方式。

答案 2 :(得分:15)

三个原因:

  1. 提高可读性。冒号有助于代码流入下面的缩进块。
  2. 为了帮助文本编辑器/ IDE,如果上一行以冒号结束,它们可以自动缩进下一行。
  3. 使python的解析稍微容易一些。

答案 3 :(得分:5)

据我所知,这是一个故意的设计,使其更明显,读者应该期待结肠后的缩进。

它也可以使这样的结构成为可能:

if expression: action()
code_continues()

注意(作为评论者所做的),这并不是优秀的Python风格的闪亮黄金标准。在那里有一个空白会好得多:

if expression: action()

code_continues()

避免混淆。我只是想说清楚,在第一个例子中,可以像这样编写,因为在冒号后紧跟if的代码使得编译器可以理解下一行应该< em> not 缩进。

答案 4 :(得分:0)

根据Python发明者Guido Van Rossum的说法,使用冒号使结构更明显的想法是受Python前身ABC语言的早期实验启发的,该实验也针对初学者。显然,在早期测试中,初学者学习结肠时比没有结肠时进步更快。在Guido的python后历史博客中阅读整个故事。

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

是的,冒号在单行代码中很有用,并且不如分号那么令人讨厌。另外,长时间使用样式指南时,建议仅在以二进制运算符结尾时才在多行上断开

x = (23 + 
     24 + 
     33)

添加冒号使复合语句看起来相同,以实现更大的样式统一性。

对于CPython和无冒口方言,有一种名为cobra的“无冒号”编码。那些没有接。