【发布时间】:2016-12-09 19:17:17
【问题描述】:
我正在查看课程材料中的代码,不得不编写一个函数,将值 99 添加到 list 或 tuple。最终代码如下所示:
def f(l):
print(l)
l += 99,
print(l)
f([1,2,3])
f((1,2,3))
这是用来展示一些不同的东西,但我有点挂断了l += 99,。这样做的目的是创建一个包含 99 和 list 以及 tuple 的可迭代对象,支持简单“添加”此类对象以创建新实例/添加新元素。
我真正不明白的是使用语法element, 创建的究竟是什么?如果我执行x = 99, 之类的任务,type(x) 将是tuple,但如果我尝试运行x = tuple(99),它将失败,因为 99 不可迭代。也有:
- 使用语法
element,创建的某种中间可迭代对象? - 是否定义了一个特殊函数,允许在没有迭代的情况下调用
tuple,并且以某种方式将,映射到该函数?
编辑:
万一有人想知道为什么接受的答案是这个答案:我的第二个问题的解释做到了。我应该对我的问题更清楚,但 += 实际上让我感到困惑,这个答案包括关于此的信息。
【问题讨论】:
-
@ScottHunter
x = 99,,而不是x = 99;逗号与分号 -
这个问题实际上发现了一些我以前不知道的东西。显然
list.__add__方法(用于添加)不会接受tuple用于other参数,但list.__iadd__(用于+=)确实接受它。我想知道这是为什么? -
这闻起来像个虫子@RickTeachey
-
@RickTeachey 我会看看能否在错误跟踪器和/或源代码上找到任何东西,这也让我感到非常惊讶。编辑:Found it :-)
-
@JimFasarakis-Hilliard “这种情况已经很久了,Guido 说他不会再这样做了(这是他的遗憾清单)。但是,我们不会破坏代码通过更改它(list.__iadd__ 像 list.extend 一样工作)。”懦夫! ;)
标签: python python-3.x tuples