📜  Python中的 A += B 赋值谜题

📅  最后修改于: 2022-05-13 01:55:33.662000             🧑  作者: Mango

Python中的 A += B 赋值谜题

在Python控制台上预测这两个表达式的输出

  • 在控制台上
    Geek = (1, 2, [8, 9])
    Geek[2] += [3, 4]
    

    输出:

    解释:

    • 查看Python为表达式 s[a] += b 生成的字节码。很清楚这是如何发生的。
    • 它一步一步地工作
      • 将 s[a] 的值放在栈顶(TOS)上。
      • 执行 TOS += b。这成功了,如果 TOS 引用了一个可变对象。这就是将项目附加到列表成功的原因。
      • 分配 s[a] = TOS。这失败了,如果 s 是不可变的。 TypeError,因为在上面的例子中元组是不可变的。

    需要学习的东西

    • 将可变项放在元组中并不是一个好主意。
    • 增强赋值不是原子操作——我们只是看到它在完成部分工作后抛出异常。
    • 检查Python字节码并不太难,而且通常有助于了解幕后发生的事情。