You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何这段包含大括号的Python代码能够正常运行?

Python里的“大括号”小意外

玩Python的人都知道,不用大括号定义代码块,全靠缩进是这门语言的标志性特性——这事儿甚至被CPython做成了个损人的小彩蛋:

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

本来我一直觉得Python和大括号在代码块这事上是彻底划清界限的,直到在某个已删除的论坛上刷到这段代码,当时我直接黑人问号:这玩意儿能跑?结果亲手试了下,还真输出了Hello!

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

那这到底是啥情况?其实这里的大括号根本不是用来定义代码块的!Python里的大括号要么是用来创建字典,要么是作为表达式分组的符号。在这个例子里,{ print('Hello') }就是个表达式语句——把print的调用包在了大括号里而已,而Python允许单行函数体直接跟在冒号后面,不用换行缩进。所以这代码其实和下面这段完全等价:

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

说白了,这里的大括号就是个多余的“摆设”,Python根本没把它当代码块界定符,只是当成表达式的分组标记处理了。是不是挺有意思的冷知识?

内容的提问来源于stack exchange,提问作者Mark Ransom

火山引擎 最新活动