目录
- 算术运算符
-
- [1. 四则运算](#1. 四则运算)
- [2. 整除](#2. 整除)
- [3. 取模](#3. 取模)
- [4. 求幂](#4. 求幂)
- 赋值运算符
-
- [1. 链式赋值](#1. 链式赋值)
- [2. 参数赋值](#2. 参数赋值)
- [3. 系列解包赋值](#3. 系列解包赋值)
- 关系运算符
- 身份运算符
- 成员运算符
- 逻辑运算符
- 位运算符
-
- [1. 按位运算](#1. 按位运算)
- [2. 移位运算](#2. 移位运算)
- 优先级
算术运算符
1. 四则运算
python
# 加减乘除:除法结果为浮点数
print(1+2, 1-2, 1*2, 2/1)
python
3 -1 2 2.0
2. 整除
python
# 向下取整
print(11//2, 11//-2)
python
5 -6
3. 取模
对于含有负数的取模运算,有以下规律:余数与除数的符号相同,余数的绝对值小于除数的绝对值。可以先取绝对值作取模运算,若结果不满足上述,则加上除数的整数倍,直至相符。
也可以套用公式:余数=被除数-除数*整除商
python
# a % b = a-b*(a//b)
print(9 % 4, 9 % -4, -9 % 4)
python
1 -3 3
4. 求幂
python
print(2**3, 3**2)
python
8 9
赋值运算符
右边的值赋给左边的变量 ,运算符为=
.
1. 链式赋值
链式赋值定义的变量共用一个内存地址 ,即不同的变量名指向的内存空间相同。
python
a = b = c = 0
2. 参数赋值
参数赋值的运算符的组成为:算术运算符 + =
,即左边变量的值与右边的值作对应数值运算后,再把结果赋给变量。
python
a = 7
a **= 2
print(a)
python
49
3. 系列解包赋值
=
两侧的变量和值用逗号隔开,从左到右依次对应赋值 。变量和值的数量必须相同 ,否则无法解包并报错,但左侧可存在相同变量。
python
# 系列解包赋值
a, b, c = 1, 2, 3
print(a, b, c)
# 交换变量值
a, b = b, a
print(a, b, c)
python
1 2 3
2 1 3
关系运算符
关系运算符用于比较值 (value
)的关系,运算结果均为bool
类型。关系运算符有<
, >
, <=
, >=
, ==
, !=
(不等于)。数值型和布尔型数据的值可以相互比较,组合类型的值的比较有更复杂的规则。
python
print(1 < 2, 1.0 > 2, True <= 2, 1 >= True+1, 1 == 2, 1 != 2)
python
True False True False False True
条件语句的判断条件经常使用到该运算符,需要注意区分=
与==
的功能差别,不要混淆。
身份运算符
身份运算符可以比较变量的标识 (identification
)的关系,运算结果均为bool
类型。身份运算符有is
, is not
(不等于)。用于判断两个标识符(变量名、常量名)是否指向同一内存地址。
(以下为拓展内容,不懂可跳)
数据类型均为数值 或布尔 时,value
相同则id
相同;
数据类型均为序列 时,即使value
相同,id
也不同,因为创建序列时,是先开辟专有空间,再存入元素,即序列的值 ;
数值 和序列 的id
一定不同,即使序列中的元素就是参与比较的数值,因为序列分配的空间是专有的,而相同的数值存储于相同地址。
python
# 创建列表(又称数组,属于可变序列,后续会介绍的一种数据类型)
list1, list2 = [1], [1]
a = 1
print(list1 == list2, list1 is list2, [2] is [2])
print(a is 1, 1 is list1, True is 1)
python
True False False
True False False
严格意义上,上述的 序列 拓展到 组合 时,仍然适用,并且布尔 和数值 之间也有 value
同id
不同 的规律。
可以回顾Python基础学习笔记(三)------变量_数据类型关于数据类型的分类的解释,这里不再展开。
成员运算符
成员运算符可以判断元素是否在指定序列中 ,运算结果均为bool
类型。成员运算符有in
, not in
。参与比较的元素必须是可以存入参与比较的序列的。
python
print(2 in [0, 2], '0' not in '02')
python
True False
逻辑运算符
逻辑运算符用于bool
类型数据间的逻辑运算 ,运算结果均为bool
类型。逻辑运算符有and
(与) , or
(或) , not
(非)。
python
# 与:当且仅当两值均为True时,返回值为True
print(1 < 2 and 1.0 > 2)
# 或:当且仅当两值均为False时,返回值为False
print([2] is [2] or True is 1)
# 非:对bool取反
print(not 2 in [0, 2])
python
False
False
False
位运算符
位运算符是将int
, bool
转为二进制进行计算,运算结果均为int
类型。位运算符有&
(按位与) , |
(按位或) , ^
(按位异或) , ~
(按位取反) , <<
(左移位) , >>
(右移位)。
1. 按位运算
有两个操作数,属于双运算符。
python
# 十进制转为二进制后,两数位数对齐,相应位做逻辑运算,得到结果位的值
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
python
# 异或:两位不同,结果为1;两位相同,结果为0
print(35 ^ 28)
python
# 输出结果为十进制整数
63
2. 移位运算
只有一个操作数,属于单运算符,移位方向跟名字一致。
python
# 二进位全部移动若干位,溢位舍去,缺位补零
a = 0011 1100
b = 0000 1101
-----------------
a>>3 = 0000 0111
b<<5 = 1010 0000
python
# 右移位:a>>b = a//2**b
print(35 >> 2, 35//2**2)
# 左移位:a<<b = a*2**b
print(12 << 3, 12*2**3)
python
8 8
96 96
优先级
运算符 | 描述 |
---|---|
** | 指数(最高) |
~ + - | 单运算符(按位翻转,一元加号和减号) |
* / // % | 乘除 |
+ - | 加减 |
>> << | 移位 |
& | 与 |
^ | | (异)或 |
<= < > >= | 比较 |
== != | 等于 |
= %= /= //= -= += *= **= | 赋值 |
is, is not | 身份 |
in, not in | 成员 |
not, and, or | 逻辑 |
一元加号和减号 的应用比较简单,这里提一下,常见于Pyhon
中的正数和负数的格式,如+1
, -1
,一般来说一元加号很少用到。