赋值与运算符

赋值

a = 123

运算符

假定 a=10, b=20

算术运算符

比较运算符

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

赋值运算符

运算符 描述 实例
= 赋值运算符 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

逻辑运算符

运算符 描述 实例
and “与” a and b 返回 True
or “或” a or b 返回 True
not “非” no(a and b) 返回 False

成员运算符

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

身份运算

位运算

&  按位与运算符  (a & b)输出结果12,二进制解释: 0000 1100
| 按位或运算符  (a | b)输出结果61,二进制解释: 0011 1101
^  按位异或运算符  (a ^ b)输出结果49,二进制解释: 0011 0001
~  按位取反运算符  (~a)输出结果-61,二进制解释: 1100 0011,在一个有符号二进制数的补码形式
<<  左移动运算符  a << 2 输出结果240,二进制解释: 1111 0000
>>  右移动运算符  a >> 2 输出结果15,二进制解释: 0000 1111

赋值语句的语法

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

实例

序列运算

>>> nudge = 1
>>> wink = 2
>>> A,B = nudge,wink
>>> A,B
(1, 2)
>>> A
1
>>> B
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)

第一项和最后一项分别赋值给了a,c,而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 = 'jie'
>>> a,b,c
('jie', 'jie', 'jie')
# 所引用的值也是同一个
>>> id(a),id(b),id(c)
(4324210760, 4324210760, 4324210760)