Python 语言中的运算符
运算符优先级
运算符优先级决定了表达式中多个运算符的执行顺序。优先级高的先执行,优先级低的后执行。不确定时,用圆括号 () 明确指定顺序。
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 高 | []、[:] |
索引、切片 |
| ↑ | ** |
幂运算 |
~、+、- |
按位取反、正号、负号 | |
*、/、%、// |
乘、除、模、整除 | |
+、- |
加、减 | |
>>、<< |
右移、左移 | |
& |
按位与 | |
^、\| |
按位异或、按位或 | |
<=、<、>、>= |
比较运算 | |
==、!= |
等于、不等于 | |
is、is not |
身份运算符 | |
in、not in |
成员运算符 | |
not、or、and |
逻辑运算符 | |
| 低 | =、+=、-= 等 |
赋值运算符 |
算术运算符
print(321 + 12) # 加法: 333
print(321 - 12) # 减法: 309
print(321 * 12) # 乘法: 3852
print(321 / 12) # 除法: 26.75
print(321 // 12) # 整除: 26(取整数部分)
print(321 % 12) # 取模: 9(余数)
print(321 ** 12) # 幂运算: 1196906950228928915420617322241
优先级:幂运算 > 乘除 > 加减,用 () 可改变执行顺序:
print(2 + 3 * 5) # 17(先乘后加)
print((2 + 3) * 5) # 25
print(((2 + 3) * 5) ** 2) # 625
赋值运算符
基本赋值:
a = 10
b = 3
a += b # 等价于 a = a + b,结果 a = 13
a *= a + 2 # 等价于 a = a * (a + 2)
海象运算符(Python 3.8+): 赋值并同时返回值的运算符:
# 普通赋值不能放在 print 中,会报错
# print(a = 10) # SyntaxError
# 海象运算符可以
print(a := 10) # 输出: 10
print(a) # a 已被赋值为 10
比较运算符
比较运算符返回布尔值 True 或 False:
print(3 > 2) # True
print(1 == 1) # True(注意是两个等号)
print(1 != 2) # True
易错点:
==是比较是否相等,=是赋值,两者不要混淆。
逻辑运算符
| 运算符 | 说明 | 规则 |
|---|---|---|
and |
逻辑与 | 两边都为 True 结果才为 True |
or |
逻辑或 | 任意一边为 True 结果就为 True |
not |
逻辑非 | 取反 |
flag1 = 3 > 2 # True
flag2 = 2 < 1 # False
print(flag1 and flag2) # False
print(flag1 or flag2) # True
print(not flag1) # False
# 短路特性
print(True and print('被执行了')) # 左边为 True,右边也会执行
print(False and print('被执行了')) # 左边为 False,右边被跳过
注意:
and左边为 False 时,右边不执行(短路);or左边为 True 时,右边不执行。
应用实例
实例1:华氏温度转摄氏温度
公式:C = (F - 32) / 1.8
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print(f'{f:.1f}华氏度 = {c:.1f}摄氏度')
实例2:计算圆的周长和面积
import math
radius = float(input('请输入圆的半径: '))
perimeter = 2 * math.pi * radius
area = math.pi * radius ** 2
# 方式1:f-string 格式化
print(f'周长: {perimeter:.2f}')
print(f'面积: {area:.2f}')
# 方式2:Python 3.8+ 变量名输出
print(f'{perimeter = :.2f}') # perimeter = 34.56
print(f'{area = :.2f}') # area = 95.03
实例3:判断闰年
闰年判断规则(格里历):
- 能被 4 整除 且 不能被 100 整除 → 闰年
- 能被 400 整除 → 闰年
year = int(input('请输入年份(1582年以后): '))
is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(f'{is_leap = }')
总结
- 运算符优先级决定表达式求值顺序,不确定时用
()显式指定 - 赋值运算符将右值赋给左变量,海象运算符
:=可同时赋值和返回 - 比较运算符返回布尔值,
==不要误写成= - 逻辑运算符
and/or/not遵循短路规则 - 字符串格式化推荐使用 f-string:
f'{变量:.2f}'