I. Python全栈之路系列之赋值与运算符

在继续下面的文章之前我们先来浏览一下Python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20。

II. 算术运算符

运算符描述实例
+加,两个对象相加a+b=30
-减,两个对象相减,可能会得到负数a-b=-10
*乘,两数相称或是返回一个被重复若干次的字符串a*b=200
/除,两个对象相除b/a=2
%取膜,返回除法的余数b%a=0
**幂,返回x的y次幂a**b=100000000000000000000L
//整除余,返回商的整数部分a//b=0

III. 比较运算符

运算符描述实例
==等于,比较两个对象是否相等a==b返回False
!=不等于,比较两个对象是否不相等a!=b返回True
<>不等于,比较两个对象是否不相等a<>b返回True
>大于,比较x是否大于y,a>b返回False
<小于,比较x是否小于ya<b返回True
>=大于等于,比较x是否大于等于ya>=b返回False
<=小于等于,比较x是否小于等于ya<=b返回True

IV. 赋值运算符

运算符描述实例
=赋值运算符c=a+b,将a+b的运算结果赋值给c
+=加法赋值运算符c += a等效于c = c + a
-=减法赋值运算符c -= a等效于c = c - a
*=乘法赋值运算符c = a等效于c = c a
/=除法赋值运算符c /= a等效于c = c / a
%=取模赋值运算符c %= a等效于c = c % a
**=幂赋值运算符c = a等效于c = c a
//=取整除赋值运算符c //= a等效于c = c // a

V. 逻辑运算符

运算符描述实例
and"与"a and b返回true
or"或"a or b返回true
not"非"no(a and b)返回false

VI. 成员运算符

运算符描述
in如果在指定的序列中找到值返回True,否则返回False
not in如果在指定的序列中没有找到值返回True,否则返回false

VII. 赋值语句的语法

运算解释
spam='Spam'基本形式
spam, ham='yum', 'YUM'元组赋值运算
[spam, han]=['yum', 'YUM']列表赋值运算
a,b,c,d='spam'序列赋值运算,通用性
a, *b='spam'扩展的序列解包
spam = ham = 'hello'多目标赋值运算
spams += 42增强赋值运算

VIII. 实例

序列运算

>>> nudge = 1
>>> wink = 2
>>> A, B = nudge, wink
>>> A,B
(1, 2)
# 嵌套的方式
>>> ((a, b), c) = ('SP', 'AM')
>>> a, b, c
('S', 'P', 'AM')

扩展的序列解包

一个列表赋给了带星号的名称,该列表收集了序列中没有赋值给其他名称的所有项。

​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​​​‌‌‌‌‍‌​​​​‌‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌‌​‌​​‌​‍‌​​‌‌​​‌‍‌​​​‌​‌​‍‌​​‌​​‌‌‍‌​​‌​​‌‌‍‌‌​‌​​‌​‍‌​​​‌‌​​‍‌​​​‌​‌‌‍‌​​‌‌‌‌​‍‌​​‌‌‌​​‍‌​​‌​‌​​‍‌‌​‌​​‌​‍‌​​​‌​​​‍‌​​‌‌‌‌​‍‌​​​​‌‌​‍‌‌​‌​​‌​‍‌​​‌‌‌‌​‍‌​​​‌‌​​‍‌​​​‌‌​​‍‌​​‌​‌‌​‍‌​​‌‌​​​‍‌​​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​​‌​​​‌‍‌​​​‌​‌‌‍‌‌​‌​​‌​‍‌​​‌‌‌‌​‍‌​​‌​​​‌‍‌​​‌‌​‌‌‍‌‌​‌​​‌​‍‌​​‌​​​​‍‌​​​‌‌‌‌‍‌​​‌‌​‌​‍‌​​​‌‌​‌‍‌​​‌‌‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​​‌‌​‌‍‌​‌​‌‌‌‌‍‌​​​​‌‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍​‌​‌‌‌​‌​​‌​‌‌‌‍​​‌​‌‌‌‌‌‌‌​‌‌‌‍​‌‌​​​‌‌​‌‌​‌​​‍​‌‌‌​​‌​​​​‌​​​​‍​​​​​‌‌​​​​​‌​​‍​‌​‌‌​‌‌‌‌​‌​​​‍​‌‌​​​‌‌​‌‌​‌​​‍​‌‌‌​​‌​‌​‌‌​‌​​‍​‌​‌‌‌‌‌‌​​​​‌‌‍​‌‌​​​‌‌‌‌‌​​​‌‍​‌‌‌​​​​​​‌​‌‌‌‌‍​​​​‌​​​‌‌​‌​​​‍​​​​‌​​‌‌​‌‌​​‌‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌​​​​‌‌​‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌‌​​‍‌‌​‌​​‌​‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​​‌‌​‌‍‌​​‌​​​​‍‌​​​‌​​​‍‌​​​‌‌​​‍‌​​‌‌​‌​‍‌​​‌‌‌‌​‍‌‌​‌​​​‌‍‌​​‌‌‌​​‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​‌​​​‌‌‍‌​​‌​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​​​‌​‌​‍‌​​​​‌‌‌‍‌​‌​​​‌‌‍‌​​​‌‌‌‌‍‌​​​​‌‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌​​​​‍‌​​‌​​​‌‍‌‌​‌​​‌​‍‌​​‌‌​​‌‍‌​​​‌​‌​‍‌​​‌​​‌‌‍‌​​‌​​‌‌‍‌‌​‌​​‌​‍‌​​​‌‌​​‍‌​​​‌​‌‌‍‌​​‌‌‌‌​‍‌​​‌‌‌​​‍‌​​‌​‌​​‍‌‌​‌​​‌​‍‌​​​‌​​​‍‌​​‌‌‌‌​‍‌​​​​‌‌​‍‌‌​‌​​‌​‍‌​​‌‌‌‌​‍‌​​​‌‌​​‍‌​​​‌‌​​‍‌​​‌​‌‌​‍‌​​‌‌​​​‍‌​​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​​‌​​​‌‍‌​​​‌​‌‌‍‌‌​‌​​‌​‍‌​​‌‌‌‌​‍‌​​‌​​​‌‍‌​​‌‌​‌‌‍‌‌​‌​​‌​‍‌​​‌​​​​‍‌​​​‌‌‌‌‍‌​​‌‌​‌​‍‌​​​‌‌​‌‍‌​​‌‌‌‌​‍‌​​​‌​‌‌‍‌​​‌​​​​‍‌​​​‌‌​‌‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

先定义一个seq序列用于测试:

>>> seq = [1, 2, 3, 4]

a匹配序列中的第一项,b匹配剩下的内容

>>> a, *b = seq
>>> a, b
(1, [2, 3, 4])

b匹配序列中的最后一项,a匹配序列中最后一项之前的所有内容

>>> *a, b = seq
>>> a,b
([1, 2, 3], 4)

第一项和最后一项分别赋值给了ac,而b获取了二者之间的所有内容。

>>> a, *b, c = seq
>>> a,b,c
(1, [2, 3], 4)

带星号的名称可能只匹配单个的项,但是,总会向其赋值一个列表,如果没有剩下的内容可以匹配那么会返回一个空列表:

>>> a,b,c,*d = seq
>>> print(a,b,c,d)
1 2 3 [4]
>>> a,b,c,d,*e = seq
>>> print(a,b,c,d,e)
1 2 3 4 []

多目标赋值语句就是直接把所有提供的变量名都赋值给右侧的对象

>>> a = b = c = 'As'
>>> a,b,c
('As', 'As', 'As')
# 所引用的值也都是同一个
>>> id(a),id(b),id(c)
(4331109208, 4331109208, 4331109208)