Python中块之前的冒号的目的是什么?
例子:
if n == 0:
print "The end"
冒号用于声明缩进块的开始。
从技术上讲,没有必要。块完成后,您可以缩进和取消缩进。但是,基于Python 公文“显式优于隐式”(EIBTI),我认为 Guido 故意将冒号设为强制性,因此任何应后跟缩进代码的语句都以冒号结尾。(如果您在冒号后继续,它也允许使用单行,但这种样式并未广泛使用。)
它还使语法感知自动缩进编辑器的工作更容易,这也计入了决定。
这个问题原来是一个Python 常见问题解答,我在这里找到了 Guido 的答案之一:
为什么 if/while/def/class 语句需要冒号?
冒号主要用于增强可读性(实验性 ABC 语言的结果之一)。考虑一下:
if a == b print a
相对
if a == b: print a
注意第二个更容易阅读。进一步注意冒号如何在此常见问题解答中引发示例;这是英语的标准用法。
另一个次要原因是冒号使语法高亮的编辑器更容易。他们可以查找冒号来决定何时需要增加缩进,而不必对程序文本进行更精细的解析。
考虑以下用 Pewprikanese 编写的从杂货店购买的物品清单。
pewkah
lalala
chunkykachoo
pewpewpew
skunkybacon
当我读到那句话时,我很困惑,chunkykachoo 和 pewpewpew 是一种拉拉拉吗?或者如果 chunkykachoo 和 pewpewpew 只是因为它们是特殊项目而缩进呢?
现在看看当我的 Pewprikanese 朋友添加一个冒号来帮助我更好地解析列表时会发生什么:(<-- 像这样)
pewkah
lalala: (<-- see this colon)
chunkykachoo
pewpewpew
skunkybacon
现在很明显,chunkykachoo 和 pewpewpew 是一种 lalala。
假设有人开始学习 Python,而这恰好是她要学习的第一门编程语言。如果没有冒号,她很有可能会一直认为“这些行是缩进的,因为这些行就像特殊的物品。”,并且可能需要一段时间才能意识到这不是考虑缩进的最佳方式。
三个原因:
据我所知,这是一个有意的设计,使其更明显,读者应该期待冒号后的缩进。
它还使这样的构造成为可能:
if expression: action()
code_continues()
请注意(正如评论者所做的那样),这并不完全是良好 Python 风格的闪亮黄金标准。最好有一个空白,那里:
if expression: action()
code_continues()
以避免混淆。我只是想通过第一个示例说明,可以这样写,因为if
冒号后面的代码使编译器可以理解下一行不应该缩进。
根据 Python 的发明者 Guido Van Rossum 的说法,使用冒号使结构更加明显的想法是受到早期对 Python 前身 ABC 语言的实验的启发,该语言也针对初学者。显然,在他们的早期测试中,初学者学习者使用结肠比不使用结肠的进步更快。在 Guido 的 post python history 博客中阅读整个故事。
http://python-history.blogspot.com/2009/02/early-language-design-and-development.html
是的,冒号在单行中很有用,而且比分号更不烦人。长期风格指南也建议仅在以二元运算符结尾时才多行中断
x = (23 +
24 +
33)
添加冒号使复合语句看起来以相同的方式获得更大的样式一致性。
CPython 有一种“无冒号”编码以及无冒号方言,称为 cobra。那些没有接。
结肠是一个完全的烦恼。如果您需要在“if”或“for”之后缩进,则只需查找“if”或“for”。
Cmon',所有这些合理化。螺旋桨芯片的“旋转”语言很容易克服这个问题。
请让我们将冒号设为可选,然后继续进行一些逻辑编程。