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

Python中块前冒号的用途是什么?,python,syntax,Python,Syntax,Python中块前冒号的用途是什么 例如: if n == 0: print "The end" 冒号用于声明缩进块的开始 从技术上讲,这是没有必要的;块完成后,可以缩进和缩进。然而,基于“显式优于隐式”(EIBTI),我认为Guido故意使冒号成为必须的,因此任何应该紧跟缩进代码的语句都以冒号结尾。(如果在冒号后继续,它还允许使用一行,但这种样式没有广泛使用。) 它还使语法感知自动缩进编辑器的工作更容易,这也在决策中起作用 这个问题原来是个问题,我在Guido那里找到了一个答案:

Python中块前冒号的用途是什么

例如:

if n == 0:
    print "The end"

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

从技术上讲,这是没有必要的;块完成后,可以缩进和缩进。然而,基于“显式优于隐式”(EIBTI),我认为Guido故意使冒号成为必须的,因此任何应该紧跟缩进代码的语句都以冒号结尾。(如果在冒号后继续,它还允许使用一行,但这种样式没有广泛使用。)

它还使语法感知自动缩进编辑器的工作更容易,这也在决策中起作用


这个问题原来是个问题,我在Guido那里找到了一个答案:

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

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

if a == b 
    print a

if a == b: 
    print a
请注意,第二个选项更容易阅读。请进一步注意,冒号是如何在这个常见问题解答中显示示例的;这是英语中的标准用法

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

原因有三:

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

  • 考虑一下下面用Pewprikanese写的从杂货店买东西的清单

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


    现在看看当我的Pewprikanese朋友添加一个冒号来帮助我更好地解析列表时会发生什么:(据我所知,这是一个有意的设计,目的是让它更明显,读者应该期望在冒号后面有一个缩进

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

    if expression: action()
    code_continues()
    
    请注意(正如一位评论者所做的那样),这并不完全是优秀Python风格的黄金标准

    if expression: action()
    
    code_continues()
    

    为了避免混淆。我只想通过第一个示例说明,这样写是可能的,因为在冒号后面紧跟着
    if
    的代码,编译器就可以理解下一行不应该缩进。

    根据Python发明者、Python开发者Guido Van Rossum的说法使用冒号使结构更加明显的想法是受到早期Python前身ABC语言的实验启发的,该语言也针对初学者。显然,在早期测试中,初学者使用冒号比不使用冒号进步更快。请在Guido的post Python history博客上阅读整个故事

    是的,冒号在一行代码中很有用,而且比分号更容易让人讨厌。此外,长期使用的样式指南建议仅当冒号以二进制运算符结尾时,才在几行中打断

    x = (23 + 
         24 + 
         33)
    
    添加冒号使复合语句以相同的方式呈现更大的样式一致性


    CPython和无冒号方言都有一种“无冒号”编码,称为cobra。这些都没有用。

    我几乎想为你的搞笑例子投票……但其他答案要强得多。不过,谢谢你的微笑!问题是python中需要缩进,所以这个例子对我来说不太合适。如果冒号是必需的,那么缩进应该是可选的,我说:-)为什么有两个相同的指示?这难道不比只有一个更复杂吗?+山姆·约瑟夫:冒号标志着开始,而不是结束。所以你不能选择缩进。只有冒号可以是可选的。上面的Python常见问题解答链接不再有效。不过这一个很有效:@ShaChris23:非常感谢您为FAQ.Ah提供了一个更新的URL。显式比隐式好。你知道还有什么是明确的吗?块结束分隔符。邪教编程。@MarkGerolimatos块结束分隔符是显式的,但缩进也是显式的。第一个示例实际上看起来更容易阅读,至少对我来说是这样。我不认为语法突出显示会成为现代编辑器的问题。+1-“增加可读性”是正确的理由。但是,当我在起草自己的语言时,我想知道,为什么让代码可读是作者的负担?语法突出显示提高了可读性,但不要求作者将代码的某些部分加粗,例如。在我看来,IDE无法处理为块的起始位置提供额外的可视队列,就像它通过着色、粗体或其他方式突出显示某些关键字一样。如果读者更愿意不使用或使用其他指标/风格,他们可能会改变皮肤。我相信只有习惯于期待的人才能更容易理解。对于那些不熟悉Python的人来说,这很奇怪,因为它只使用空格,突然使用冒号而不是空格并不会使它更可读,只会导致错误。唯一真正的原因是改变它为时已晚。语法分析器不用冒号就可以轻松工作,加油,大家:IDE可能对我喜欢称之为“回车”的小东西很敏感。我第一次学习Python时发现这个冒号很烦人:它似乎与整个项目的“基于空间的语法”理念不一致。人们给出的理由没有一个是令人信服的,除非是“哎呀,我的错:改变已经太晚了。”好吧,这正是“改变已经太晚了”。@Gabriel——你的评论有误导性。substa酒店
    x = (23 + 
         24 + 
         33)