文章目录
-
-
- 1. 运算符简介
- 2. 算术运算符
- 3. 增量赋值运算符
- 4. 比较运算符
-
- 4.1 比较运算符
- 4.2 数字比较
- 4.3 字符比较
- 5. 逻辑运算符
-
- 5.1 短路运算
- 5.2 练习1
- 5.3 练习2
- 5.4 练习3
- 6. 成员运算符
- 7. 身份运算符
- 8. 按位运算符
- 9. 运算符优先级
- 10. 练习
1. 运算符简介
运算符用于执行程序代码运算, 在 Python 程序中运算符按应用场景可分为:
* 1. 算术运算符
* 2. 增量赋值运算符
* 3. 比较运算符
* 4. 逻辑运算符
* 5. 成员运算符
* 6. 身份运算符
* 6. 按位运算符
...
* Python 是强类型语言, 不同类型之间是不可以操作的.
2. 算术运算符
运算符 |
操作 |
示例 |
+ 加 (有特殊含义) |
两个对象相加. |
1 + 1 = 2 |
- 减 |
得到负数或两个数相减. |
-1, 2 - 0 = 2 |
* 乘 (有特殊含义) |
两个数相乘或重复n次. |
2 * 2 = 4 |
/ 除 |
被除数 / 除数 = 商 |
5 / 2 = 2.5 |
% 模运算, 求余数 |
被除数 / 除数 = 商···余数 |
5 % 2 = 2···1 |
** 幂 |
底数 ** 指数 = 幂 |
2 ** 3 = 8 |
// 整除, 向下取整 |
被除数 / 除数 = 整商 |
9 // 4 = 2(向下取整) |
* 整型 与 浮点型操作的结果是浮点型, 整型与整型做除法运算结果是浮点型.
print(1 + 1.1)
print(2 - 1.0)
print(2 * 3.0)
print(3 / 3)
print(2 ** 4.0)
print(9 % 2.0)
print(9 // 2)
print(-9 // 2)
对应内置方法:
.__add__() 加 返回 self+value.
.__radd__() 被加 返回 value+self.
.__pos__() 加上正号 返回 +self, 默认不显示.
.__sub__() 减 返回 self-value.
.__rsub__() 被减 返回 value-self.
.__neg__() 加上负号 返回 -self.
.__mul__() 乘 返回 self*value.
.__truediv__() 除 返回 self/value.
.__rtruediv__() 被除 返回 value/self.
.__mod__() 求余 返回 self%value.
.__floordiv__() 整除 返回 self//value.
3. 增量赋值运算符
运算符 |
描述 (赋值符号左边的值称为’左值’, 其他的都为’右值’) |
对等 |
= 赋值 |
将赋值符号 右边 的值赋值给 左边. |
|
+= 加法赋值 |
n += x, 左值先与右值相加, 在把结果赋值给左值. |
n = n + x |
-= 减法赋值 |
n -= x, 左值先与右值相减, 在把结果赋值给左值. |
n = n - x |
*= 乘法赋值 |
n *= x, 左值先与右值相乘, 在把结果赋值给左值. |
n = n * x |
/= 除法赋值 |
n /= x, 左值先与右值相除, 在把结果赋值给左值. |
n = n / x |
%= 求余赋值 |
n %= x 左值先与右值求余数, 在把结果赋值给左值. |
n = n % x |
**= 幂赋值 |
n **= x 左值先与右值求幂, 在把结果赋值给左值. |
n = n ** x |
//= 整除赋值 |
n **= x 左值先与右值整除, 在把结果赋值给左值. |
n = n // x |
:= 海象运算符 |
可在表达式内部为变量赋值, Python3.8 版本新增. |
|
a = 1
print(a)
a += 1
print(a)
a -= 1
print(a)
a *= 2
print(a)
a /= 2
print(a)
b = 2
b **= 3
print(b)
b //= 2
print(b)
b %= 3
print(b)
print(n := 1)
对应内置方法:
__iadd__ 加法赋值 返回 self+=value.
__imul__ 乘法赋值 返回 self*=value.
4. 比较运算符
4.1 比较运算符
比较运算的返回结果是布尔值 True / False.
运算符 |
描述 |
示例 |
> 大于 |
判断左侧是否大于右侧. |
a > b ( a 大于 b ) |
< 小于 |
判断左侧是否小于右侧. |
a < b ( a 小于 b ) |
== 等于 |
判断值是否相等. |
a= b ( a 等于 b ) |
!= 不等于 |
判断值是否不相等. |
a != b ( a 不等于 b ) |
>= 大于或等于 |
判断左侧是否大于或等于右侧. |
a >= b ( a 大于或等于 b ) |
<= 小于或等于 |
判断左侧是否小于或等于右侧. |
a <= b ( a 小于或等于 b ) |
4.2 数字比较
print(2 > 1)
print(3 < 4)
print(3 * 2 == 6 * 1)
print(7 != 6)
print(2 >= 2)
print(3 <= 3)
print(3 > 1 > 1)
对应内置方法:
.__gt__() 大于 返回 self>值
.__ge__() 大于或等于 返回 self>=value
.__lt__() 小于 返回 self<值
.__le__() 小于或等于 返回self<值
.__eq__() 等于 返回self==value.
.__ne__() 不等于 返回 self!=value.
.__bool__() 不等于0 返回 self!=0.
4.3 字符比较
涉及字符串的比较, 则需要转为 Unicode 编码表对应的十进制数来比较.
常用字符对应的十进制数.
字符 | 十进制
0-9 : 30-39
A-Z : 65-90
a-z : 95-122
str1 = 'ABC'
str2 = 'ABD'
print(str1 > str2)
print(str1 < str2)
5. 逻辑运算符
运算符 |
逻辑表达式 |
描述 |
示例 |
and 与 |
x and y |
x 的值为 Flase , 返回 x 的值, x 的值为 True , 返回 y 的值. |
1 and 1 值为 1 |
or 或 |
x or y |
x 的值为 True, 返回 x 的值, x 的值为False , 返回 y 的值. |
1 or 0 值为 1 |
not 非 |
not x |
把 x 的值转为布尔值取反. |
not False 值为 True |
5.1 短路运算
可以使用逻辑运算符进行短路运算.
短路运算的原理: 当多个表达式中, 左边的表达式值可以确定结果时,
直接返回最后一个参与运算的值, 不继续往后运算.
print(0 and 0)
print(0 and 1)
print(1 and 0)
print(1 and 1)
print(0 or 0)
print(0 or 1)
print(1 or 0)
print(1 or 1)
print(not 0)
print(not 1)
5.2 练习1
print(1 and 2 and 3)
print(1 and 0 and 2)
print(1 and None and 2)
print(1 or 2 or 3)
5.3 练习2
print(7 > 2 or 1)
print(7 + 2 or 1)
print(1 and 2 or 0)
print(not 1 or 2)
5.4 练习3
当表达式较长时, 加括号区分优先级.
7 + 2 > 0 and 7 > 6 + 1 or 1 == 1
and优先级最低, 在两变加括号.
(7 + 2 > 0) and (7 > 6 + 1) or (1 == 1)
* 这种代码几乎不会出现, 一般出现在面试题中.
print((7 + 2 > 0) and (7 > 6 + 1) or (1 == 1))
6. 成员运算符
判断某个个体是否在否个群体当中.
运算符 |
描述 |
示例 |
in |
在指定序列中查找值, 找到返回True, 否则返回False. |
x在y序列中返回True |
not in |
在指定序列中查找值, 没找到返回True, 否则返回False. |
x不在y序列中返回True |
str1 = 'abc'
l1 = ['a', 'b', 'c']
print('a' in str1)
print('a' in list1)
print('q' not in str1)
print('q' not in list1)
7. 身份运算符
简单来说就是判断两个对象的id值是否相对, id相等就意味着引用相等, 值肯定一样.
运算符 |
描述 |
实例 |
is |
判断两个标识符的引用是否为同一个对象. |
x is x,返回True |
is not |
判断两个标识符的引用是否为不同对象. |
x is not x,返回False |
注意 is 与比较运算符 == 的区别:
is 用于判断两个变量的引用是否为同一个对象,
== 用于判断变量引用的对象的值是否相等.
num1 = 1
num2 = 1
print(num1 is num2)
print(num1 is not num2)
print(num1 == num2)
list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 is list2)
print(list1 is not list2)
print(list1 == list2)
8. 按位运算符
运算符 |
描述 |
示例 |
& 按位与 |
参与运算的两个值都为 1 结果为 1, 否则都为 0. |
1 & 1 值为 1 |
❘ 按位或 |
参与运算的有一个值为 1 结果为 1, 否则都为 0. |
1 ❘ 0 值为 1 |
^ 按位异或 |
参与运算的两个值不同时结果为1, 否则都为 0. |
1 ^ 0 值为 1 |
~ 按位取反 |
按位取反, 把1变成0, 把0变成1. 规律:~x = -(x+1) , ~-x = (x-1). |
~ 0 值为 1 |
<< 左移 |
二进制为全部左移n为, 高位丢弃, 低位补0. |
num << 2 |
>> 右移 |
二进制为全部右移n为, 低位丢弃, 高位补0. |
num >> 2 |
print(1 & 5)
"""
1 --> 0001
5 --> 0101
----------
1 <-- 0001
"""
print(1 | 5)
"""
1 --> 0001
5 --> 0101
----------
5 <-- 0101
"""
print(1 ^ 5)
"""
1 --> 0001
5 --> 0101
----------
4 <-- 0100
"""
print(~1)
print(~-1)
print(1 << 2)
"""
1 --> 0001
----------
4 <-- 0100
"""
print(4 >> 2)
"""
4 --> 0100
----------
1 <-- 0001
"""
对应内置方法:
.__and__() 按位与 返回 self&value.
__or__() 按位或 返回 self|value.
.__xor__() 按位异或 返回 self^value.
.__rxor__() 值按位异或 返回 value^self.
.__invert__() 按位取反 返回 ~self.
.__lshift__() 左移 返回 self<<value.
.__rshift__() 右移 返回 self>>value.
.__rrshift__() 值右移 返回 value>>self.
9. 运算符优先级
* 在编写的时候应该人为的规定好优先级, 使用括号进行区分.
优先级 |
符号 |
运算 |
1 |
** |
幂, 最高优先级. |
2 |
~ + - |
按位取反, 一元运算符 加 减. |
3 |
* / % // |
乘 , 除, 求余, 整除. |
4 |
>> << |
右, 左位移. |
5 |
& |
按位与. |
6 |
^ |
按位异或. |
7 |
❘ |
按位或. |
8 |
<= < > >= |
大于等于, 大于, 小于, 小于等于. |
9 |
== != |
等于, 不等于. |
10 |
= += -= *= /= %= //= **= |
赋值, 先(加 减乘 , 除, 求余, 整除 , 幂)计算在赋值. |
11 |
is ,is not |
身份运算. |
12 |
in not in |
成员运算. |
13 |
not and or |
逻辑非, 逻辑与, 逻辑或. |
10. 练习
1. 什么是左值? 什么是右值?
2. 什么是成员运算符, 什么是身份运算符?
3. 自己写表达式时, 如何提高代码的可读性?
4. 短路运算的原理是什么?
文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.