Python从未使用大括号来定义代码块,而是依赖于缩进;这是该语言的定义特征之一。甚至还有一个小饼干,CPython让你展示他们对此有多强烈的感受:
>>> from __future__ import braces
SyntaxError: not a chance
当我看到这个小片段发布到论坛(自删除)后,我认为它不可行。但确实如此!
>>> def hi(): {
print('Hello')
}
>>> hi()
Hello
为什么此代码在违反语言语法时有效?
答案 0 :(得分:4)
大括号没有像在其他语言中那样定义代码块 - 它们定义了set
。正在评估print
函数,并将其返回值(None
)放入集合中。一旦创建了集合,它就会被立即丢弃,因为它没有被分配给任何东西。
这里有一些Python语法功能正在被利用。首先,Python允许单个语句代码块在:
之后立即出现。其次,在某些情况下允许表达式跨越多行。
如果块的主体多于一行,或者尝试了除函数调用之外的赋值或语句,则此代码将不起作用。
这是函数的重做,以便更清楚地发生了什么:
>>> def hi2(): print(
{ print('Hello') }
)
>>> hi2()
Hello
{None}