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

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

例:

if n == 0: print "The end" 

冒号在那里声明一个缩进块的开始。

从技术上讲,这是没有必要的。 块完成后,您可以缩进和取消缩进。 然而,基于Python的 “显式优于隐式”(EIBTI),我认为Guido故意使冒号成为强制性的,所以任何 应该由缩进代码跟随的语句以冒号结尾。 (如果你继续冒号,它也允许单行,但是这种风格并没有被广泛使用。)

这也使语法意识的自动缩进编辑器的工作更容易,这也被计入决策。


这个问题原来是一个Python常见问题解答 ,我在这里find了Guido的一个答案:

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

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

 if a == b print a 

 if a == b: print a 

注意第二个如何更容易阅读。 进一步注意一个冒号在这个常见问答答案中的例子。 这是英文的标准用法。

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

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

 pewkah lalala chunkykachoo pewpewpew skunkybacon 

当我读到时,我很困惑,chunkykachoo和pewpewpewpewlawlawlala? 或者,如果chunkykachoo和pewpewpew因为特殊项目而缩进呢?

现在看看当我的Pewprikanese朋友添加一个冒号来帮助我更好地parsing列表时会发生什么:(< – 像这样)

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

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

假设有一个人正在开始学习Python,这正好是她第一个学习的编程语言。 如果没有冒号,那么她很可能会不断思考“这条线是缩进的,因为这条线就像是特殊的东西”,可能需要一些时间才能认识到这不是考虑缩进的最好方法。

三个原因:

  1. 增加可读性。 冒号帮助代码stream入下面的缩进块。
  2. 为了帮助文本编辑器/ IDE,如果上一行以冒号结尾,他们可以自动缩进下一行。
  3. 为了使pythonparsing稍微容易一些。

据我所知,这是一个有意的devise,使其更加明显,读者应该期望在冒号之后有一个缩进。

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

 if expression: action() code_continues() 

请注意(作为一个评论者),这不完全是良好的Python风格的shiny金标准。 有一个空白会好得多:

 if expression: action() code_continues() 

避免混淆。 我只是想用第一个例子来说明,可以像这样写,因为紧跟在冒号后面的if代码可以让编译器明白下一行应该缩进。