python - 列表 字符串连接
巴扎黑
巴扎黑 2017-04-18 09:36:40
[Python讨论组]

通过变量赋值相加和直接相加的结果为什么不一样?

巴扎黑
巴扎黑

全部回复(2)
巴扎黑

因为 + 和 += 是不同的操作符

>>> ['a'] + list('bcd')
['a', 'b', 'c', 'd']

来看看 += 的本质~

>>> help(list.__iadd__)
Help on wrapper_descriptor:

__iadd__(self, value, /)
    Implement self+=value.

+= 对应的是 __iadd__函数,再深追~

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

__iadd__ 对应的是 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函数!
明白了吧~~


由于python的运算符可以重载,所以,各个具体的对象中相同操作符的实现方式是有很大区别的。
就本题而言,list 对象的 += 可以简单理解为:for循环 和 append() 的简写形式。

迷茫

@同意并接受 怎么进去看__iadd__的源码的,我只看到了这一步

def __iadd__(self, *args, **kwargs): # real signature unknown
        """ Implement self+=value. """
        pass

你回答问题的这些我都没看到
def __iadd__(self, values):

self.extend(values)
return self
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号