【Python中a += b 并不一定等价于a = a + b】,作者:青南,链接:https://t.cn/Et0Jsv8
导读
大家经常在一些博客中看到这样的说法:
a += 1
等价于
a = a + 1
这种说法实际上并不准确。
我们来看一个例子:
>>> a = [1, 2, 3]
>>> a += (4,)
>>> a
[1, 2, 3, 4]
>>> a = [1, 2, 3]
>>> a = a + (4,)
Traceback (most recent call last):
File "", line 1, in
TypeError: can only concatenate list (not "tuple") to list
这里报错了,说明a += b和a = a + b并不是完全等价的。
实际上,这是由于+=会首先调用左边这个对象的__iadd__方法,如果没有__iadd__方法,就会调用__add__方法。但是如果直接使用+号,就会直接调用__add__方法。而对于字符串、数字、浮点数这种不可变对象,他们没有__iadd__方法,所以对他们来说,a += b 与 a = a + b是等价的。
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
导读
大家经常在一些博客中看到这样的说法:
a += 1
等价于
a = a + 1
这种说法实际上并不准确。
我们来看一个例子:
>>> a = [1, 2, 3]
>>> a += (4,)
>>> a
[1, 2, 3, 4]
>>> a = [1, 2, 3]
>>> a = a + (4,)
Traceback (most recent call last):
File "
TypeError: can only concatenate list (not "tuple") to list
这里报错了,说明a += b和a = a + b并不是完全等价的。
实际上,这是由于+=会首先调用左边这个对象的__iadd__方法,如果没有__iadd__方法,就会调用__add__方法。但是如果直接使用+号,就会直接调用__add__方法。而对于字符串、数字、浮点数这种不可变对象,他们没有__iadd__方法,所以对他们来说,a += b 与 a = a + b是等价的。
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
#快来抢,手快有,手慢无#
抢优惠券网站https://t.cn/Rm4PnAY
原创绿豆糕模具月饼模手压式冰皮立体烘焙家用不粘压花糕点做点心
【原价】7.9,【券后】2.9
复制¥iaDd0AHYvVS¥打开手机.淘.宝.领券下单
【今日推荐】花片纹理清晰,简单脱模,按压式,操作方便,花型多样,多规格可选,造型美观时尚,多花片选择,安全卫生,坚固耐用,使用方便,制作简单,月饼轻松成型!
抢优惠券网站https://t.cn/Rm4PnAY
原创绿豆糕模具月饼模手压式冰皮立体烘焙家用不粘压花糕点做点心
【原价】7.9,【券后】2.9
复制¥iaDd0AHYvVS¥打开手机.淘.宝.领券下单
【今日推荐】花片纹理清晰,简单脱模,按压式,操作方便,花型多样,多规格可选,造型美观时尚,多花片选择,安全卫生,坚固耐用,使用方便,制作简单,月饼轻松成型!
【满6元减5元】裙子夏2018新款V领喇?..【119.9】
复制这条消息,€Iadd0C65sk9€打开【手机淘宝】即可领券购买。
------------------------
【自己找优惠券地址】https://t.cn/RuTeaRT
加入公众号“神秘口袋”购物返现,而且淘宝、京东、拼多多更多平台等领优惠券
你也可以直接在公众号输入你要查的商品
复制这条消息,€Iadd0C65sk9€打开【手机淘宝】即可领券购买。
------------------------
【自己找优惠券地址】https://t.cn/RuTeaRT
加入公众号“神秘口袋”购物返现,而且淘宝、京东、拼多多更多平台等领优惠券
你也可以直接在公众号输入你要查的商品
✋热门推荐