a = 345
b = 5 > 4
a = 0
a = a + 1
a = 0
等价于 a = a + 1
a += 1
这种算术运算符在前,等号在后的表示方式还6种,分别是:
-=
减法赋值运算符*=
乘法赋值运算符/=
除法赋值运算符%=
取模赋值运算符**=
幂赋值运算符//=
取整除赋值运算符
a , b = 1, 2
a, b, c = 3, 4, 5
a=b=c=1
用这种方式,a, b, c 的值都是1。 但在使用这种方式时,有一个坑需要注意。
a = b = c = [1]
print(id(a))
140028754117760
a = b = c = [1]
print(id(b))
140028754261248
a = b = c = [1]
print(id(c))
140028754258496
这3个变量的内存地址是相同的,而如果采用单个变量赋值的基本形式,则不会相同。
a = [1]
print(id(a))
140028754261248
b = [1]
print(id(b))
140028754162624
c = [1]
print(id(c))
140028754260608
用这种方式,每一行赋值语句,都会在内存中创建一个列表再赋值给变量,因此他们的内存地址不同。
使用 a = b = c = [1]
这种多目标赋值方法,其过程是这样的,先创建列表[1]
,赋值给a,
然后执行 b = a
, c = a
,因此在使用多目标赋值语法时,不要将可变对象赋值给多个变量,一面他们之间互相影响。
i=0
mylist = [1,2,3,4,5,6]
while i < len(mylist):
print( mylist[i])
++i
运行这段代码会有什么问题?也许会说:抛出语法错误。能说出这个答案的至少知 道Python中是不支持 ++i
操作的。
但输出果真如此吗?非也,这段程序不会抛出任何语法错误.却会无限循环地输出1。原因是什么呢?
因为Python解释器会将 ++i
操作解释为 +(+i)
, 其中+表示正数符号。对于 --i
操作也是类似。
+1
1
++1
1
-2
-2
负负得正
--2
2
因此需要明白 ++i
在Python中语法上是合法的,但并不是我们理解的通常意义上的自增操作。