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

{}[0]:1

它创建一个空字典,然后访问0键.然而,我认为下面的:1是无效的语法.事实上,如果我试图确定结果的类型:

type({}[0]:1)

出现语法错误.每当我try 处理结果(例如print({}[0]:1))时,都会出现类似的行为.

为什么会发生这种情况?我假设解释器识别出该表达没有被分配并且不会编译它.因此您可以在存在{}[0]:1行的情况下运行您的代码.然而,这与不同语法无效代码引发的其他语法错误(例如引发错误的1:1)不一致.

推荐答案

{}[0]:1作为陈述不是语法错误.

这是一个注释,其中{}[0]是被注释的内容,1是注释.通常,你会写类似x: int的东西.

{}[0]不是错误,因为它就像在任务的左侧执行一样.

我们可以通过使用dis.dis(这是Python 3.11.2)看到这一点:

>>> 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作为表达时,它才是无效的语法.

巧合的是,您在:的左侧 Select 了{}[0],但这并不总是有效:

>>> print(x):1
  File "<stdin>", line 1
    print(x):1
    ^^^^^^^^
SyntaxError: illegal target for annotation

(对于1:1个,您应该得到同样的错误.)

语言参考中的相应部分在这里:https://docs.python.org/3/reference/simple_stmts.html#annotated-assignment-statements

Python相关问答推荐

如何在PIL、Python中对图像应用彩色面膜?

如何根据情况丢弃大Pandas 的前n行,使大Pandas 的其余部分完好无损

Python会扔掉未使用的表情吗?

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

如何在msgraph.GraphServiceClient上进行身份验证?

try 与gemini-pro进行多轮聊天时出错

如何将双框框列中的成对变成两个新列

什么相当于pytorch中的numpy累积ufunc

如果值不存在,列表理解返回列表

log 1 p numpy的意外行为

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

两个pandas的平均值按元素的结果串接元素.为什么?

Pandas:将多级列名改为一级

我对我应该做什么以及我如何做感到困惑'

在pandas中使用group_by,但有条件

Asyncio:如何从子进程中读取stdout?

使用BeautifulSoup抓取所有链接

交替字符串位置的正则表达式

如何将数据帧中的timedelta转换为datetime

比Pandas 更好的 Select