1.运算符分类
- 算术运算符:+、-、*、/、%、//、**
- 比较运算符:==、!=、>、<、>=、<=
- 赋值运算符:=、+=、-+、*=、/=、%=、//=、**=
- 逻辑运算符:and、or、not
- 位运算符:&、|、~、^、<<、>>
- 成员运算符:in、not in
- 身份运算符:is、is not
1.1 算术运算符
运算符 | 描述 |
+ | 加,两个数相加 |
- | 减,两个数相减 |
* | 乘,两个数相乘 |
/ | 除,两个数相除 |
// | 求余,向下取接近除数的整数 |
% | 取模,返回触发的余数 |
** | 幂,返回x的y次幂 |
>>> 3 + 2
5
>>> 0.1 + 0.2 #Python浮点数的运算其包含的小数位数是不确定的
0.30000000000000004
>>> 0.3 - 0.2
0.09999999999999998
>>> 0.2 * 0.1
0.020000000000000004
>>> 0.1 / 0.2
0.5
>>> 10 // 3
3
>>> 10 % 3
1
>>> 2 ** 3
8
求余运算也可用于浮点数甚至负数,但是并不是很好理解。
>>> 10 % 3
1
>>> 10 % -3
-2
>>> -10 % 3
2
>>> -10 % -3
-1
通过研究与之配套的整除运算可帮助理解求余运算的工作原理。
基于除法运算的工作原理,很容易理解最终的余数是多少。
x % y的结果为x除以y的余数。换而言之,结果为执行整除时余下的部分,即x % y等价于x-((x // y) * y)。
对于整除运算,需要明白的一个重点是它向下圆整结果。因此在结果为负数的情况下,圆整后将离0更远。这意味着对于-10 // 3,将向下圆整到-4,而不是向上圆整到-3。
1.2 比较运算符
结果返回布尔值(True或False)
运算符 | 描述 |
== | 等于,比较两者是否相等 |
!= | 不等于,比较两者是否不相等 |
> | 大于,返回a是否大于b |
< | 小于,返回a是否小于b |
>= | 大于,返回a是否大于等于b |
<= | 小于,返回a是否小于小于b |
>>> 5 == 3
False
>>> 5 != 3
True
>>> 5 > 3
True
>>> 5 < 3
False
>>> 5 >= 3
True
>>> 5 <= 3
False
1.3 赋值运算符
注:python没有自增自减运算符(如++、--)
运算符 | 描述 |
= | 赋值运算符 |
+= | 加法赋值运算符,a += b等价于a = a + b |
-= | 减法赋值运算符,a -= b等价于a = a - b |
*= | 乘法赋值运算符,a *= b等价于a = a * b |
/= | 除法赋值运算符,a /= b等价于a = a / b |
//= | 求余赋值运算符,a //= b等价于a = a // b |
%= | 取模赋值运算符,a %= b等价于a = a % b |
**= | 幂赋值运算符,a **= b等价于a = a ** b |
>>> a = 20
>>> b = 10
>>> a += b
>>> a
30
>>> a -= b
>>> a
20
>>> a *= b
>>> a
200
>>> a /= b
>>> a
20.0
>>> a //= 2
>>> a
10.0
>>> a = 10
>>> a %= 4
>>> a
2
>>> a **= 2
>>> a
4
1.4 逻辑运算符
运算符 | 描述 |
and | 布尔与,and两端都为True则为True,否则为False |
or | 布尔或,or两端只要有一个为True则为True,否则为False |
not | 布尔非,若x为True,返回False。若x为False,则返回True |
>>> True or True and False #可以看出and优先级高于or
True #正确的执行顺序为:True or (True and False)
>>> not not True or False and not True #可以看出优先级:not>and>or
True #正确的执行顺序为:not (not (True or (False and (not True))))
1.5 位运算符
运算符 | 描述 |
& | 按位与运算符,参与运算的两个值,若相应位都为1,则该位的结果为1,否则为0 |
| | 按位或运算符,只要对应的两个二进制值有一个为1时,结果就为1;全为0则为0 |
~ | 按位取反运算符,对数据的每个二进制取反,即把1变0,0变1 |
^ | 按位异或运算符,当两对应的二进制相应位不相同时,则该位的结果为1 |
<< | 左移运算符,运算符的各二进制位全部左移若干位,高位丢弃,低位补0 |
>> | 右移运算符,运算符的各二进制位全部右移若干位,高位补0,低位丢弃 |
>>> 3 & 2 #3二进制为011,2二进制为010,按位与后为010,转换为十进制就是2
2
>>> 3 | 2 #3二进制为011,2二进制为010,按位或后为011,转换为十进制就是3
3
>>> 3 ^ 2 #3二进制为011,2二进制为010,按位异或后为001,转换为十进制就是1
1
>>> ~3 #3二进制为011,按位取反后为100,转换为十进制就是4
-4
>>> 8 << 2 #8二进制为1000,左移两位为100000(末尾补2个0),转换为十进制就是32
32
>>> 8 >> 2 #8二进制为1000,左移两位为0010(高位补2个0),转换为十进制就是2
2
1.6 成员运算符
运算符 | 描述 |
in | 若在指定序列中找到指定值返回True,否则返回False |
not in | 若在指定序列中没有找到指定值返回False,否则返回True |
>>> 3 in (1,2,3)
True
>>> 4 in (1,2,3)
False
>>> 'a' in 'python'
False
>>> 'p' in 'python
True
1.7 身份运算符
运算符 | 描述 |
is | 若两个标识符引用自一个对象返回True,否则返回False |
is not | 若两个标识符引用自不同对象返回True,否则返回False |
>>> a = 5
>>> b = 3
>>> c = 5
>>> a is b
False
>>> a is c
True
>>> b is c
False
>>> a is not b
True
>>> a is not c
False
2. 运算符优先级
运算符(降低优先顺序) | 说明 |
** | 幂运算符 |
~、+、- | 按位翻转、一元加号、一元减号 |
*、/、%、// | 算术运算符 |
>>、<< | 位运算符 |
& | 位运算符 |
^、| | 位运算符 |
<、> 、<=、>= | 比较运算符 |
==、!= | 比较运算符 |
=、+=、-=、*=、/=、%=、//=、**= | 赋值运算符 |
is、is not | 身份运算符 |
in、not in | 成员运算符 |
and、or、not | 逻辑运算符 |