Python中+=符号的思考

首先,+=可以理解成先+再=

1. +调用的是__add__魔术方法,+=调用的是__iadd__魔术方法,__iadd__方法只有可变类型有,不可变类型是没有的。

参考下例:

>>> t1 = (1, 2, [3, 4])
>>> t1[2] += [5, 6]
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'tuple' object does not support item assignment
>>> t1
(1, 2, [3, 4, 5, 6])
>>> 

my_tuple是不可变类型,所以当对其中的某个元素进行+=操作时,试图调用__iadd__失败,因此报错,但实际上my_tuple[2]对应的元素是list类型,因此虽然报错了,但实际却发生了变化。如果进行my_tuple.extend([5,6])拼接操作,则可以避免此错误,并实现相同的效果。

2. 对于三种可迭代类型,

  • string类型没有extend方法,没有append方法,只能用+或者+=拼接且只能和string拼接,拼接后id发生变化,因为string是不可变类型。
  • list类型有extend方法,extend方法可接受所有可迭代类型的参数(str, list, tuple, set)并依次添加至list,也有append方法,append方法将参数作为一个整体添加至list末尾。extend和+=效果完全相同。三种方式操作完id保持不变,因为list是可变类型。
  • tuple类型没有extend方法,没有append方法,只能用+或者+=拼接且只能和tuple拼接。拼接后id发生变化,因为string是不可变类型。

3. 如何理解这个符号:左边是变量,右边是变量值。

对于简单的a = 1; a += 3,可以看成a = a + 3,从右向左看,右边的a可以看成是a的值,即1,1 + 3得到4后赋值给左边的a,此时左边的a就只是一个变量名。

你可能感兴趣的:(python)