文章目录
什么是运算符?
- 运算符是符号,它们告诉解释器执行特定的操作,例如算术,比较,逻辑等。
基本运算符类型
1. 算术运算符
以a = 10 b = 4为例子
运算符 | 描述 | 实例 |
---|---|---|
+ | 加法运算,将运算符两边的操作数增加。 | a + b = 14 |
- | 减法运算,将运算符左边的操作数减去右边的操作数。 | a – b = 6 |
* | 乘法运算,将运算符两边的操作数相乘 | a * b = 40 |
/ | 除法运算,用右操作数除左操作数 | a / b = 2.5 |
% | 模运算,用右操作数除数左操作数并返回余数 | a % b = 2 |
** | 对运算符进行指数(幂)计算 | a ** b = 10^4 = 10000 |
// | 地板除 - 操作数的除法,其结果是删除小数点后的商数。 但如果其中一个操作数为负数,则结果将被保留,即从零(向负无穷大)舍去 | 9//2 = 4, 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0 |
2. 比较(关系)运算符
比较(关系)运算符比较它们两边的值,并确定它们之间的关系。
以a = 10 b = 4为例子
运算符 | 描述 | 示例 |
---|---|---|
== | 如果两个操作数的值相等,则条件为真。 | (a == b) 求值结果为 False |
!= | 如果两个操作数的值不相等,则条件为真。 | (a != b) 求值结果为 True |
> | 如果左操作数的值大于右操作数的值,则条件成为真。 | (a > b) 求值结果为 True |
< | 如果左操作数的值小于右操作数的值,则条件成为真。 | (a < b) 求值结果为 False |
>= | 如果左操作数的值大于或等于右操作数的值,则条件成为真。 | (a >= b) 求值结果为 True |
<= | 如果左操作数的值小于或等于右操作数的值,则条件成为真。 | (a <= b) 求值结果为 False |
3. 赋值运算符
3.1 增量赋值
运算符 | 描述 | 示例 |
---|---|---|
= | 将右侧操作数的值分配给左侧操作数 | 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 |
3.2 链式赋值
把同一个值同时赋值给多个变量:
方式1:
z = 10
y = z
x = y
print(x, y, z) # 10, 10, 10
方式2:
x = y = z = 10
print(x, y, z) # 10, 10, 10
# 方式2 就是链式赋值
3.3 交叉赋值
定义两个变量 m 与 n
m = 10
n = 20
怎么将m和n的值交换过来
# 方式1:
temp = m
m = n
n = temp
print(m, n) # 20, 10
# 方式2:
m ,n = n ,m # 交叉赋值
print(m, n) # 20, 10
3.4解压赋值
把列表中多个值取出来依次赋值给多个变量名
nums=[11,22,33,44,55]
# 方式1:
a=nums[0]
b=nums[1]
c=nums[2]
d=nums[3]
e=nums[4]
print(a,b,c,d,e) # 11,22,33,44,55
# 方式2:
a, b, c, d, e = nums # 解压赋值
print(a,b,c,d,e) # 11,22,33,44,55
'''
解压赋值,等号左边变量名的个数必须和右边包含的值的个数相同,否则就会报错
'''
# 高级用法
# 可以用*-匹配来实现只取头尾几个值
a, b ,*- = nums
print(a,b) # 11,22
a, *-, e = nums
print(a,e) # 11,55
4. 逻辑运算符
Python语言支持以下逻辑运算符。
运算符 | 描述 | 示例 |
---|---|---|
and | 如果两个操作数都为真,则条件成立。 | (a and b) 的结果为Talse |
or | 如果两个操作数中的任何一个非零,则条件成为真。 | (a or b) 的结果为True |
not | 用于反转操作数的逻辑状态。 | not(a and b) 的结果为Frue 。 |
4.1 连续多个and
可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为False,则无需再往右判断,可以立即判定最终结果就为False,只有在所有条件的结果都为True的情况下,最终结果才为True。
4.2 连续多个or
可以用or连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果就为True,只有在所有条件的结果都为False的情况下,最终结果才为False
4.3 and or not 混合使用
- 优先级: not >and>or
# 最优解:在编写的时候应该人为的规定好优先级
eg: (3>4 and 7) or (not 1) or (('tony' and 'tom') and True)
5. 按位运算符(了解即可)
python语言支持以下按位运算符,执行逐位运算(以二进制进行运算)。
运算符 | 描述 | 示例 |
---|---|---|
& | 如果它存在于两个操作数中,则操作符复制位到结果中 | (a & b) 结果表示为 0000 1100 |
I | 如果它存在于任一操作数,则复制位。 | (aIb) = 61 结果表示为 0011 1101 |
^ | 二进制异或。如果它是一个操作数集合,但不是同时是两个操作数则将复制位。 | (a ^ b) = 49 (结果表示为 0011 0001 ) |
~ | 二进制补码,它是一元的,具有“翻转”的效果。 | (~a ) = -61 有符号的二进制数,表示为1100 0011 的补码形式。 |
<< | 二进制左移,左操作数的值由右操作数指定的位数左移。 | a << 2 = 240 (结果表示为 1111 0000 ) |
>> | 二进制右移,左操作数的值由右操作数指定的位数右移。 | a >> 2 = 15 (结果表示为0000 1111 ) |
6. 成员运算符
Python成员运算符测试给定值是否为序列中的成员,有两个成员运算符
运算符 | 描述 | 示例 |
---|---|---|
in | 如果在指定的序列中找到一个变量的值,则返回True ,否则返回False 。 | - |
not in | 如果在指定序列中找不到变量的值,则返回True ,否则返回False 。 | - |
7. 身份运算符
身份运算符比较两个对象的内存位置。常用的有两个身份运算符。
运算符 | 描述 | 示例 |
---|---|---|
is | 如果运算符任一侧的变量指向相同的对象,则返回True ,否则返回False 。 | |
is not | 如果运算符任一侧的变量指向相同的对象,则返回True ,否则返回False 。 | - |
运算符优先级
下表列出了从最高优先级到最低优先级的所有运算符
序号 | 运算符 | 描述 |
---|---|---|
1 | ** | 指数(次幂)运算 |
2 | ~ + - | 补码,一元加减(最后两个的方法名称是+@ 和-@ ) |
3 | * / % // | 乘法,除法,模数和地板除 |
4 | + - | |
5 | >> << | 向右和向左位移 |
6 | & | 按位与 |
7 | ^ I | 按位异或和常规的“OR ” |
8 | <= < > >= | 比较运算符 |
9 | <> == != | 等于运算符 |
10 | = %= /= //= -= += *= **= | 赋值运算符 |
11 | is is not | 身份运算符 |
12 | in not in | 成员运算符 |
13 | not or and | 逻辑运算符 |