在元组类中使用“\uuu add\uuu”方法

2024-09-25 02:41:10 发布

您现在位置:Python中文网/ 问答频道 /正文

PythonNoob在这里讨论元组和列表的限制。在

我没有问题,只是一个关于__methodname__方法在Tuple类和/或一般情况下的用法的一般查询。在

我知道你不能修改元组,为了这样做,你必须把它转换成一个列表,修改所说的列表,然后再转换回元组,但是我试了一下__add__方法,发现它是有效的。使用此方法创建新元组并对现有元组进行修改有哪些问题和限制?在

代码:

myTuple = ('item1', 2, 'item3', ['list1', 'list2'])
tupleModification = myTuple.__add__(('newTupleItem1','newTupleItem2'))

这将输出以下内容:

^{pr2}$

这是正确的,但我想知道我是否在玩火,因为我还没有看到这个解决方案张贴在任何地方有关修改元组。在

编辑:我知道您不能修改现有的元组,这将创建一个新的元组实例。我想我可能用我的命名惯例把人们搞糊涂了。在


Tags: 方法代码add用法列表情况元组item1
3条回答

__add__是在执行以下操作时调用的方法:

myTuple + ("newTupleItem1", "newTupleItem2")

因此,这不会修改myTuple,而是创建一个新的tuple,其内容是myTuple的内容与("newTupleItem1", "newTupleItem2")相连。在

您可以打印myTuple以查看它是否未被修改:

^{pr2}$

您可以检查myTupletupleModification不是同一个对象:

^{3}$

你不能修改元组,没错。但是,您可以将两个现有的元组连接到一个新的元组中。这是通过+运算符完成的,该运算符又调用__add__方法。生成的元组不是任何原始元组的“修改”,而是一个新的独立元组。这就是你发布的代码所做的。更简洁地说,您可以:

myTuple = ('item1', 2, 'item3', ['list1', 'list2'])
tupleModification = myTuple + ('newTupleItem1','newTupleItem2')
print(tupleModification)
# ('item1', 2, 'item3', ['list1', 'list2'], 'newTupleItem1', 'newTupleItem2')

编辑:作为一个澄清,你无论如何都不能“编辑”一个元组,也就是说,从中添加或删除元素,或者更改它的内容。但是,如果元组包含可变对象(如列表),则可以修改该内部对象:

^{pr2}$

我认为从根本上说,您对创建带有修改的新对象(在本例中是__add__)和修改现有对象(例如extend)之间的区别感到困惑。在

__add__

正如前面提到的其他答案,__add__方法实现了+运算符,并返回一个新对象。元组和列表都有一个。例如:

>>> tuple_0 = (1,)
>>> tuple_1 = tuple_0.__add__((2,))
>>> tuple_1 is tuple_0
False
>>> 
>>> list_0 = [1]
>>> list_1 = list_0.__add__([2])
>>> list_1 is list_0
False

extend

列表是可变的,有一个extend方法,它修改现有对象并返回None。元组是不可变的。例如:

^{pr2}$

列表还有其他方法可以更改现有对象,如appendsortpop等,但是extend与{}最为相似。在

相关问题 更多 >