为什么在这个Python代码中允许使用大括号?

时间:2018-03-26 16:17:52

标签: python curly-braces

Python从未使用大括号来定义代码块,而是依赖于缩进;这是该语言的定义特征之一。甚至还有一个小饼干,CPython让你展示他们对此有多强烈的感受:

>>> from __future__ import braces
SyntaxError: not a chance

当我看到这个小片段发布到论坛(自删除)后,我认为它不可行。但确实如此!

>>> def hi(): {
    print('Hello')
    }

>>> hi()
Hello

为什么此代码在违反语言语法时有效?

1 个答案:

答案 0 :(得分:4)

大括号没有像在其他语言中那样定义代码块 - 它们定义了set。正在评估print函数,并将其返回值(None)放入集合中。一旦创建了集合,它就会被立即丢弃,因为它没有被分配给任何东西。

这里有一些Python语法功能正在被利用。首先,Python允许单个语句代码块在:之后立即出现。其次,在某些情况下允许表达式跨越多行。

如果块的主体多于一行,或者尝试了除函数调用之外的赋值或语句,则此代码将不起作用。

这是函数的重做,以便更清楚地发生了什么:

>>> def hi2(): print(
    { print('Hello') }
    )

>>> hi2()
Hello
{None}