gpt4 book ai didi

python - 这种奇怪的冒号行为在做什么?

转载 作者:行者123 更新时间:2023-12-03 21:25:56 24 4
gpt4 key购买 nike

我正在使用 Python 3.6.1,但遇到了一些非常奇怪的事情。我有一个简单的字典作业错字,我花了很长时间才找到。

context = {}
context["a"]: 2
print(context)

输出
{}

密码是什么 context["a"]: 2正在做?它不会引发 SyntaxError什么时候应该 IMO。起初我以为它正在创建一个切片。但是,输入 repr(context["a"]: 2)引发 SyntaxError .我还输入了 context["a"]: 2在控制台中,控制台没有打印任何内容。我想也许它返回了 None ,但我不太确定。

我还认为它可能是单行 if 语句,但这也不应该是正确的语法。

此外, context["a"]应该提出 KeyError .

我很困惑。到底是怎么回事?

最佳答案

您不小心编写了语法正确的变量注释。该功能是在 Python 3.6 中引入的(参见 PEP 526)。

尽管变量注释被解析为 annotated assignment 的一部分,赋值语句是可选的:

annotated_assignment_stmt ::=  augtarget ":" expression ["=" expression]

因此,在 context["a"]: 2
  • context["a"]是注解目标
  • 2是注释本身
  • context["a"]未初始化

  • PEP 声明“注释的目标可以是任何有效的单个赋值目标,至少在语法上(取决于类型检查器如何处理)”,这意味着键不需要存在即可注释(因此没有 KeyError )。这是原始 PEP 的示例:
    d = {}
    d['a']: int = 0 # Annotates d['a'] with int.
    d['b']: int # Annotates d['b'] with int.

    通常,注释表达式应该计算为 Python 类型——
    毕竟注解的主要用途是类型提示,但并没有强制执行。注释可以是任何有效的 Python 表达式,无论结果的类型或值如何。

    如您所见,此时类型提示非常宽松且很少有用,除非您有静态类型检查器,例如 mypy .

    关于python - 这种奇怪的冒号行为在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353415/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com