在 pyhon3.10 中,我可以运行此代码片段而不会引发任何错误:
{}[0]:1
这会创建一个空字典,然后访问 0 键。然而,接下来的
:0
是我认为无效的语法。事实上,如果我尝试确定结果的类型:
type({}[0]:1)
出现语法错误。每当我尝试处理结果时,都会发生类似的行为,例如
print({}[0]:1)
。
为什么会出现这种情况?我假设解释器将表达式识别为未分配并且不编译它。因此,您可以在存在
{}[0]:1
行的情况下运行代码。但是,这与不同语法无效代码引发的其他语法错误不一致(例如引发错误的 1:1
)。
{}[0]:1
作为语句不是语法错误。
这是一个注释,其中
{}[0]
是被注释的内容,1
是注释。作为注解,不执行。
我们可以通过使用
dis.dis
来看到这一点:
>>> dis.dis("{}[0]:1")
0 0 RESUME 0
1 2 SETUP_ANNOTATIONS
4 BUILD_MAP 0
6 POP_TOP
8 LOAD_CONST 0 (0)
10 POP_TOP
12 LOAD_CONST 1 (1)
14 POP_TOP
16 LOAD_CONST 2 (None)
18 RETURN_VALUE
仅当使用
{}[0]:1
作为表达式时,才是无效语法。
巧合的是,您选择了
{}[0]
左侧的 :
,这并不总是有效:
>>> print(x): 1
File "<stdin>", line 1
print(x):1
^^^^^^^^
SyntaxError: illegal target for annotation