python - 为什么在此 Python 代码中允许使用大括号?

标签 python curly-braces

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

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

当我看到这个小片段发布到论坛(已删除)时,我认为它不可能工作。但确实如此!

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

>>> hi()
Hello

当这段代码似乎违反了语言语法时,为什么它可以工作?

最佳答案

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

此处使用了一些 Python 语法功能。首先,Python 允许单语句代码块紧跟在 : 之后。其次,在某些情况下允许表达式跨越多行。

如果 block 的主体超过一行,或者如果尝试了除函数调用之外的赋值或语句,则此代码将无法运行。

这里重做函数以使其更清楚发生了什么:

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

>>> hi2()
Hello
{None}

关于python - 为什么在此 Python 代码中允许使用大括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49496091/

相关文章:

c++ - 使用花括号分隔我想在 C++ 中多次使用的变量

python - 如何在 Python 中控制模拟

python - "for line in file object"读取文件的方法

python - 在Python中使用xlrd从Excel读取日期时,日期时间随机变成 float

android - 我的代码中的语法错误,Android application-ping IP

bash - 为什么 bash4 以不同方式扩展花括号?

python - 根据组合框 1 填充组合框 2

python - Dropbox Python SDK SSL 错误

visual-studio-2010 - 我可以让 Visual Studio 将花括号与 if 语句(在 HTML 中)放在同一行吗?

c++ - 如何在 Visual Studio 2012 中禁用大括号补全?