python 会丢弃未使用的表达式吗?

问题描述 投票:0回答:1

在 pyhon3.10 中,我可以运行此代码片段而不会引发任何错误:

{}[0]:1

这会创建一个空字典,然后访问 0 键。然而,接下来的

:0
是我认为无效的语法。事实上,如果我尝试确定结果的类型:

type({}[0]:1)

出现语法错误。每当我尝试处理结果时,都会发生类似的行为,例如

print({}[0]:1)

为什么会出现这种情况?我假设解释器将表达式识别为未分配并且不编译它。因此,您可以在存在

{}[0]:1
行的情况下运行代码。但是,这与不同语法无效代码引发的其他语法错误不一致(例如引发错误的
1:1
)。

python syntax expression
1个回答
0
投票

{}[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
© www.soinside.com 2019 - 2024. All rights reserved.