在python中添加和删除速记

2024-04-23 13:46:25 发布

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

我注意到,在python中,您可以使用+=将其附加到列表中,请执行以下操作:

s = ['a', 'b', 'c']
s += 'd'
# s = ['a', 'b', 'c', 'd']

这与执行s.append('d')相同。但s.remove('a')没有等价物:

^{pr2}$

那么当你使用+=时会发生什么呢?


Tags: 列表remove时会appendpr2
1条回答
网友
1楼 · 发布于 2024-04-23 13:46:25

list上的+=与做s.append是不同的。这和做s.extend是一样的。在这种情况下,它看起来只是一样的,因为字符串是一个字符序列,所以一个字符串本身就是一个序列。一般来说,这是非常不同的。尝试用数字或3个字符的字符串。在


总之,“当您使用+=时发生了什么”是这样的:

首先,语句a += b查找方法a.__iadd__。如果它存在(就像它通常在可以就地改变的对象上一样,比如list),它将被转换成以下代码:

a = a.__iadd__(b)

否则(与不可变对象一样,比如int),它被转换成(松散地说)为:

^{pr2}$

list.__iadd__存在。当然,在CPython中,它是用C实现的,但是等效的Python代码非常简单:

def __iadd__(self, other):
    self.extend(other)
    return self

extend方法等效于:

def self.extend(self, iterable):
    for element in iterable:
        self.append(element)

因此,您的s += 'd'有效地做到了:

for char in 'd': # this loops once, with `char` being `'d'`
    s.append(char)
s = s

显然,在幕后很多东西都是优化的;extend不必动态地查找append方法或在循环中调用它(可能多次扩展列表的存储),它只需具有与它这样做一样的可见效果。在


有关如何工作的更多信息,请参阅文档的以下部分:

相关问题 更多 >