Python中块之前冒号的目的是什么?
示例:
if n == 0:
print "The end"
答案 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)
三个原因:
答案 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的“无冒号”编码。那些没有接。