# Python 语言中的运算符 ## 运算符优先级 运算符优先级决定了表达式中多个运算符的执行顺序。优先级高的先执行,优先级低的后执行。不确定时,用圆括号 `()` 明确指定顺序。 | 优先级 | 运算符 | 说明 | |--------|--------|------| | 高 | `[]`、`[:]` | 索引、切片 | | ↑ | `**` | 幂运算 | | | `~`、`+`、`-` | 按位取反、正号、负号 | | | `*`、`/`、`%`、`//` | 乘、除、模、整除 | | | `+`、`-` | 加、减 | | | `>>`、`<<` | 右移、左移 | | | `&` | 按位与 | | | `^`、`\|` | 按位异或、按位或 | | | `<=`、`<`、`>`、`>=` | 比较运算 | | | `==`、`!=` | 等于、不等于 | | | `is`、`is not` | 身份运算符 | | | `in`、`not in` | 成员运算符 | | | `not`、`or`、`and` | 逻辑运算符 | | 低 | `=`、`+=`、`-=` 等 | 赋值运算符 | ## 算术运算符 ```python 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 ``` **优先级**:幂运算 > 乘除 > 加减,用 `()` 可改变执行顺序: ```python print(2 + 3 * 5) # 17(先乘后加) print((2 + 3) * 5) # 25 print(((2 + 3) * 5) ** 2) # 625 ``` ## 赋值运算符 **基本赋值:** ```python a = 10 b = 3 a += b # 等价于 a = a + b,结果 a = 13 a *= a + 2 # 等价于 a = a * (a + 2) ``` **海象运算符(Python 3.8+):** 赋值并同时返回值的运算符: ```python # 普通赋值不能放在 print 中,会报错 # print(a = 10) # SyntaxError # 海象运算符可以 print(a := 10) # 输出: 10 print(a) # a 已被赋值为 10 ``` ## 比较运算符 比较运算符返回布尔值 `True` 或 `False`: ```python print(3 > 2) # True print(1 == 1) # True(注意是两个等号) print(1 != 2) # True ``` > **易错点**:`==` 是比较是否相等,`=` 是赋值,两者不要混淆。 ## 逻辑运算符 | 运算符 | 说明 | 规则 | |--------|------|------| | `and` | 逻辑与 | 两边都为 True 结果才为 True | | `or` | 逻辑或 | 任意一边为 True 结果就为 True | | `not` | 逻辑非 | 取反 | ```python 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` ```python f = float(input('请输入华氏温度: ')) c = (f - 32) / 1.8 print(f'{f:.1f}华氏度 = {c:.1f}摄氏度') ``` ### 实例2:计算圆的周长和面积 ```python 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 整除 → 闰年 ```python 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}'`