gpt4 book ai didi

python - 元组:+= 运算符抛出异常,但成功了吗?

转载 作者:IT老高 更新时间:2023-10-28 21:11:27 25 4
gpt4 key购买 nike

为什么下面的代码虽然成功了却抛出异常?

>>> t = ([1, 2, 3], 4)
>>> t[0] += [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
([1, 2, 3, 1], 4)
>>>

最佳答案

在 IRC 上找到答案。

t[0] += [1] 是几个离散的 Action :

  1. 正在加载t[0]
  2. 构建一个包含 1 的新列表
  3. [1] 添加到任何 t[0]
  4. 重新分配 t[0]

似乎 x += y 基本上是 x = x + y (但是,是吗?)

棘手的一点是 += 意味着对元组 t 和列表 t[0]

的赋值

t[0] += [1] 不是 字面意思 t[0] = t[0] + [1],它是:t[0] = t[0].__iadd__([1])

真正发生的是:

  1. __iadd__ 都会改变列表并返回它。因此,列表(t 中的第一个元素)已经附加了 1
  2. 元组的变异也被尝试在原地,但元组是不可变的,导致异常。

为什么这不是显而易见的?因为像我这样的 n00b 会期望 t[0] += [1] 要么一起成功要么失败,因为它是 python 的一小行。但情况并非总是如此。

关于python - 元组:+= 运算符抛出异常,但成功了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38344244/

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