gpt4 book ai didi

python - 赋值表达式的求值顺序(海象运算符)

转载 作者:行者123 更新时间:2023-12-04 11:47:02 26 4
gpt4 key购买 nike

我有以下表达式:

>>> a = 3
>>> b = 2
>>> a == (a := b)
False
现在, a == 2手术后,正如预期的那样。结果就是我想要的,即 a 的比较分配前分配给 RHS。
反转相等运算符的顺序会反转结果:
>>> a = 3
>>> b = 2
>>> (a := b) == a
True
PEP-572, relative precedence section 中似乎没有任何与此极端情况直接相关的内容。 .下一节, change to evaluation order提到评估顺序是从左到右。这就是这里发生的事情(存储 a 的值,更新它,然后比较 vs 更新 a ,然后与它的新值进行比较)?
这种行为在哪里定义,它的可靠性如何?

最佳答案

这些 PEP 部分都与此无关。你只有一个 ==比较,和一般Evaluation order适用:“Python 从左到右计算表达式。”
所以你的 (a := b) == a简单地首先评估左侧 (a := b) , 分配一些东西给 a并评估为相同的值。然后评估右侧a ,这当然仍然是相同的(刚刚​​分配的)值,所以你得到 True .

关于那些 PEP 部分:
第一个 PEP 部分说的是 :=组比 == 更紧密,因此如果您没有括号,它将适用:

  • a == a := b将意味着 (a == a) := b (尝试分配给比较时会出现语法错误)。
  • a := b == a将意味着 a := (b == a) ,其中与您的值 b == a计算结果为 False然后分配给 a并成为整个表达式的结果。 (请注意,在语句级别,您必须编写 (a := b == a) 。)

  • 第二个 PEP 部分所做的只是指出一些已经存在但 := 的不好的东西。使“更明显”,所以他们建议最终修复它。问题是像 {X: Y for ...} 这样的 dict 理解评价 Y之前 X , 反对一般的从左到右的规则和反对 dict 显示,如 {X: Y}已经评估了 X之前 Y正如预期的那样。考虑一下:
    >>> a, b = 3, 2
    >>> {a: (a := b) for _ in '_'}
    {3: 2}
    使用旧的行为,它会导致 {2: 2} .考虑到人们可能会在 := 时写出类似的东西变得可用,它变得更成为一个问题。

    关于python - 赋值表达式的求值顺序(海象运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69167795/

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