gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:59:06 28 4
gpt4 key购买 nike

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

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

输出

{}

context["a"]: 2 代码在做什么?它不会在应该 IMO 时引发 SyntaxError。一开始我以为是在创建切片。但是,键入 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/56975442/

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