扫码关注官方订阅号
通过变量赋值相加和直接相加的结果为什么不一样?
因为 + 和 += 是不同的操作符
>>> ['a'] + list('bcd') ['a', 'b', 'c', 'd']
来看看 += 的本质~
+=
>>> help(list.__iadd__) Help on wrapper_descriptor: __iadd__(self, value, /) Implement self+=value.
+= 对应的是 __iadd__函数,再深追~
__iadd__
def __iadd__(self, values): self.extend(values) return self
__iadd__ 对应的是 extend函数,再、再、深追~
extend
def extend(self, values): 'S.extend(iterable) -- extend sequence by appending elements from the iterable' for v in values: self.append(v)
extend 的本质是 append函数!明白了吧~~
append
由于python的运算符可以重载,所以,各个具体的对象中相同操作符的实现方式是有很大区别的。就本题而言,list 对象的 += 可以简单理解为:for循环 和 append() 的简写形式。
重载
list
@同意并接受 怎么进去看__iadd__的源码的,我只看到了这一步
def __iadd__(self, *args, **kwargs): # real signature unknown """ Implement self+=value. """ pass
你回答问题的这些我都没看到def __iadd__(self, values):
self.extend(values) return self
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为 + 和 += 是不同的操作符
来看看
+=的本质~+=对应的是__iadd__函数,再深追~__iadd__对应的是extend函数,再、再、深追~extend的本质是append函数!明白了吧~~
由于python的运算符可以
重载,所以,各个具体的对象中相同操作符的实现方式是有很大区别的。就本题而言,
list对象的+=可以简单理解为:for循环 和 append() 的简写形式。@同意并接受 怎么进去看__iadd__的源码的,我只看到了这一步
你回答问题的这些我都没看到
def __iadd__(self, values):