Python3(6) 运算符
在 Python 编程中,运算符是处理数据和构建逻辑的关键工具。理解并熟练运用各类运算符,对于编写高效、准确的代码至关重要。本文将深入探讨 Python3 中的各种运算符,并通过丰富的代码示例进行详细讲解,方便大家日后复习和回顾。
一、运算符概述
运算符是用于执行特定操作的符号,如在 “4 + 5 = 9” 中,“+” 就是运算符,4 和 5 是操作数 。Python3 支持多种运算符,涵盖算术、比较、赋值等多个类别,下面我们逐一展开介绍。
二、算术运算符
算术运算符用于基本数学运算,具体如下:
运算符 | 描述 | 示例(设 a = 10,b = 21) |
---|---|---|
+ | 加法,两个对象相加 | a + b 结果为 31 |
- | 减法,得到负数或两数相减 | a - b 结果为 -11 |
* | 乘法,或用于重复字符串 | a * b 结果为 210;'abc' * 3 结果为 'abcabcabc' |
/ | 除法,结果为浮点数 | b /a 结果为 2.1 |
% | 取模,返回除法余数 | b % a 结果为 1 |
** | 幂运算,返回 x 的 y 次幂 | a ** b 即 10 的 21 次方 |
// | 取整除,向小的方向取整 | 9 // 2 结果为 4;-9 // 2 结果为 -5 |
示例代码:
a = 21
b = 10
c = 0c = a + b
print(f"1 - c的值为:{c}") # 输出31c = a - b
print(f"2 - c的值为:{c}") # 输出11c = a * b
print(f"3 - c的值为:{c}") # 输出210c = a / b
print(f"4 - c的值为:{c}") # 输出2.1c = a % b
print(f"5 - c的值为:{c}") # 输出1a = 2
b = 3
c = a ** b
print(f"6 - c的值为:{c}") # 输出8a = 10
b = 5
c = a // b
print(f"7 - c的值为:{c}") # 输出2
三、比较运算符
比较运算符用于比较对象,返回布尔值(True 或 False) 。
运算符 | 描述 | 示例(设 a = 10,b = 20) |
---|---|---|
== | 判断两个对象是否相等 | (a == b) 返回 False |
!= | 判断两个对象是否不等 | (a!= b) 返回 True |
> | 判断 x 是否大于 y | (a> b) 返回 False |
< | 判断 x 是否小于 y | (a < b) 返回 True |
>= | 判断 x 是否大于等于 y | (a>= b) 返回 False |
<= | 判断 x 是否小于等于 y | (a <= b) 返回 True |
示例代码:
a = 21
b = 10if a == b:print("1 - a等于b")
else:print("1 - a不等于b") # 输出:1 - a不等于bif a!= b:print("2 - a不等于b") # 输出:2 - a不等于b
else:print("2 - a等于b")if a < b:print("3 - a小于b")
else:print("3 - a大于等于b") # 输出:3 - a大于等于bif a > b:print("4 - a大于b")
else:print("4 - a小于等于b") # 输出:4 - a小于等于ba = 5
b = 20
if a <= b:print("5 - a小于等于b") # 输出:5 - a小于等于b
else:print("5 - a大于b")if b >= a:print("6 - b大于等于a") # 输出:6 - b大于等于a
else:print("6 - b小于a")
四、赋值运算符
赋值运算符用于给变量赋值,除基本的 “=” 外,还有一些复合赋值运算符。
运算符 | 描述 | 示例(设 a = 10,b = 20) |
---|---|---|
= | 简单赋值 | 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 |
:= | 海象运算符(Python3.8+),在表达式中赋值并返回值 | 若 list_a = [1, 2, 3, 4, 5],if (n := len (list_a)) > 3: print (f"列表元素个数为 {n},大于 3") |
示例代码:
a = 21
b = 10
c = 0c = a + b
print(f"1 - c的值为:{c}") # 输出31c += a
print(f"2 - c的值为:{c}") # 输出52c *= a
print(f"3 - c的值为:{c}") # 输出1092c /= a
print(f"4 - c的值为:{c}") # 输出52.0c = 2
c %= a
print(f"5 - c的值为:{c}") # 输出2c **= a
print(f"6 - c的值为:{c}") # 输出2097152c //= a
print(f"7 - c的值为:{c}") # 输出99864
五、位运算符
位运算符将数字视为二进制进行计算。以 a = 60(二进制 0011 1100),b = 13(二进制 0000 1101)为例:
运算符 | 描述 | 示例 | ||
---|---|---|---|---|
& | 按位与,对应位都为 1 时结果位为 1,否则为 0 | (a & b) 结果为 12(二进制 0000 1100) | ||
按位或,对应位有一个为 1 时结果位为 1 | (a | b) 结果为 61(二进制 0011 1101) | ||
^ | 按位异或,对应位相异时结果为 1 | (a ^ b) 结果为 49(二进制 0011 0001) | ||
~ | 按位取反,1 变 0,0 变 1,~x 类似于 -x - 1 | (~a) 结果为 -61(二进制 1100 0011) | ||
<< | 左移运算符,各二进位左移指定位数,高位丢弃,低位补 0 | a << 2 结果为 240(二进制 1111 0000) | ||
>> | 右移运算符,各二进位右移指定位数 | a >> 2 结果为 15(二进制 0000 1111) |
示例代码:
a = 60
b = 13
c = 0c = a & b
print(f"1 - c的值为:{c}") # 输出12c = a | b
print(f"2 - c的值为:{c}") # 输出61c = a ^ b
print(f"3 - c的值为:{c}") # 输出49c = ~a
print(f"4 - c的值为:{c}") # 输出 -61c = a << 2
print(f"5 - c的值为:{c}") # 输出240c = a >> 2
print(f"6 - c的值为:{c}") # 输出15
六、逻辑运算符
逻辑运算符用于布尔运算,返回布尔值。
运算符 | 逻辑表达式 | 描述 | 示例(设 a = 10,b = 20) |
---|---|---|---|
and | x and y | 布尔 “与”,x 为 False 时返回 x,否则返回 y 的计算值 | (a and b) 返回 20 |
or | x or y | 布尔 “或”,x 为 True 时返回 x,否则返回 y 的计算值 | (a or b) 返回 10 |
not | not x | 布尔 “非”,x 为 True 时返回 False,x 为 False 时返回 True | not (a and b) 返回 False |
示例代码:
a = 10
b = 20if a and b:print("1 - 变量a和b都为true") # 输出:1 - 变量a和b都为true
else:print("1 - 变量a和b有一个不为true")if a or b:print("2 - 变量a和b都为true,或其中一个变量为true") # 输出:2 - 变量a和b都为true,或其中一个变量为true
else:print("2 - 变量a和b都不为true")a = 0
if a and b:print("3 - 变量a和b都为true")
else:print("3 - 变量a和b有一个不为true") # 输出:3 - 变量a和b有一个不为trueif a or b:print("4 - 变量a和b都为true,或其中一个变量为true") # 输出:4 - 变量a和b都为true,或其中一个变量为true
else:print("4 - 变量a和b都不为true")if not (a and b):print("5 - 变量a和b都为false,或其中一个变量为false") # 输出:5 - 变量a和b都为false,或其中一个变量为false
else:print("5 - 变量a和b都为true")
七、成员运算符
成员运算符用于检测值是否在序列中。
运算符 | 描述 | 示例 |
---|---|---|
in | 在指定序列中找到值返回 True,否则返回 False | 若 list_d = [1, 2, 3],1 in list_d 返回 True |
not in | 在指定序列中未找到值返回 True,否则返回 False | 4 not in list_d 返回 True |
示例代码:
a = 10
b = 20
list_c = [1, 2, 3, 4, 5]if a in list_c:print("1 - 变量a在给定的列表中list中")
else:print("1 - 变量a不在给定的列表中list中") # 输出:1 - 变量a不在给定的列表中list中if b not in list_c:print("2 - 变量b不在给定的列表中list中") # 输出:2 - 变量b不在给定的列表中list中
else:print("2 - 变量b在给定的列表中list中")a = 2
if a in list_c:print("3 - 变量a在给定的列表中list中") # 输出:3 - 变量a在给定的列表中list中
else:print("3 - 变量a不在给定的列表中list中")
八、身份运算符
身份运算符用于比较两个对象的存储单元。
运算符 | 描述 | 示例 |
---|---|---|
is | 判断两个标识符是否引用同一对象 | x is y 类似 id (x) == id (y),是则返回 True,否则返回 False |
is not | 判断两个标识符是否引用不同对象 | x is not y 类似 id (x) != id (y),是则返回 True,否则返回 False |
示例代码:
a = 20
b = 20if a is b:print("1 - a和b有相同的标识") # 输出:1 - a和b有相同的标识
else:print("1 - a和b没有相同的标识")if id(a) == id(b):print("2 - a和b有相同的标识") # 输出:2 - a和b有相同的标识
else:print("2 - a和b没有相同的标识")b = 30
if a is b:print("3 - a和b有相同的标识")
else:print("3 - a和b没有相同的标识") # 输出:3 - a和b没有相同的标识if a is not b:print("4 - a和b没有相同的标识") # 输出:4 - a和b没有相同的标识
else:print("4 - a和b有相同的标识")
九、运算符优先级
运算符优先级决定表达式的计算顺序。优先级从高到低大致如下(同一单元格内优先级相同,幂运算从右至左结合,其他从左至右结合):
运算符 | 描述 | |
---|---|---|
(expressions...) ,[expressions...] ,{key: value...} ,{expressions...} | 圆括号表达式、列表、字典、集合 | |
x[index] ,x[index:index] ,x(arguments...) ,x.attribute | 索引、切片、调用、属性引用 | |
await x | await 表达式 | |
** | 乘方(指数) | |
+x ,-x ,~x | 正号、负号、按位取反 | |
* ,@ ,/ ,// ,% | 乘、矩阵乘、除、整除、取余 | |
+ ,- | 加、减 | |
<< ,>> | 移位 | |
& | 按位与 | |
^ | 按位异或 | |
` | ` | 按位或 |
in ,not in ,is ,is not ,< ,<= ,> ,>= ,!= ,== | 比较运算、成员检测、标识检测 | |
not x | 逻辑非 | |
and | 逻辑与 | |
or | 逻辑或 | |
if -- else | 条件表达式 | |
lambda | lambda 表达式 | |
:= | 赋值表达式 |
示例代码:
a = 20
b = 10
c = 15
d = 5
e = 0e = (a + b) * c / d
print(f"(a + b) * c / d运算结果为:{e}") # 输出90.0e = ((a + b) * c) / d
print(f"((a + b) * c) / d运算结果为:{e}") # 输出90.0e = (a + b) * (c / d)
print(f"(a + b) * (c / d)运算结果为:{e}") # 输出90.0e = a + (b * c) / d
print(f"a + (b * c) / d运算结果为:{e}") # 输出50.0x = True
y = False
z = False
print("情况1:默认优先级(先算and)")
if x or y and z: # 等同于x or (y and z)print("yes") # 输出yes
else:print("no")print("\n情况2:强制改变优先级(先算or)")
if (x or y) and z: # 人为添加括号改变顺序print("yes")
else:print("no") # 输出no
通过上述对 Python3 各类运算符的详细介绍和代码示例,相信大家对运算符的理解和运用有了更深入的认识。在实际编程中,合理运用运算符能够让代码更加简洁、高效。希望这篇博客能成为大家复习回顾的好资料,助力大家在 Python 编程道路上不断进步。