当前位置: 首页 > article >正文

python基础入门:2.2运算符与表达式

运算符与表达式

1. 基础运算符分类

1.1 算术运算符

# 基础运算
print(10 + 3)   # 加法 → 13
print(10 - 3)   # 减法 → 7
print(10 * 3)   # 乘法 → 30
print(10 / 3)   # 真除法 → 3.333...
print(10 // 3)  # 整除法 → 3
print(10 % 3)   # 取余 → 1
print(10 ** 3)  # 幂运算 → 1000

特殊案例

print(9 ** 0.5)  # 平方根 → 3.0
print(7 // -2)   # 负数整除 → -4(向下取整)

1.2 比较运算符

a, b = 5, 7
print(a == b)   # False
print(a != b)   # True
print(a > b)    # False
print(a <= b)   # True

# 字符串按字典序比较
print("apple" < "banana")  # True

1.3 逻辑运算符

短路特性示例

def check():
    print("执行检查")
    return True

False and check()  # 不执行check函数
True or check()    # 不执行check函数

1.4 成员运算符

colors = ["red", "green", "blue"]
print("yellow" in colors)     # False
print("green" not in colors)  # False

# 字符串子串检测
print("py" in "python")  # True

2. 高级运算符技巧

2.1 链式比较

x = 3
print(1 < x < 5)        # True
print(0 < x**2 < 25)    # True

# 等效于
print(1 < x and x < 5)  # True

注意陷阱

count = 0
def get_num():
    global count
    count += 1
    return count

# 链式比较触发两次函数调用
print(1 < get_num() < 3)  # 实际等价于 (1 < get_num()) and (get_num() < 3)
# 当count初始为0时:第一次返回1,第二次返回2 → (True) and (2 < 3) → True
# 但函数被调用两次,可能引发副作用

2.2 海象运算符(Python 3.8+)

在表达式中赋值

# 传统写法
n = len([1,2,3])
if n > 2:
    print(n)

# 使用海象运算符
if (n := len([1,2,3])) > 2:
    print(n)

# 循环中的应用
while (input_str := input("输入内容(q退出): ")) != "q":
    print(f"你输入了:{input_str}")

适用场景

  • 简化重复函数调用
  • 在推导式中复用计算结果
squares = [y for x in range(10) if (y := x**2) > 25]
print(squares)  # [36, 49, 64, 81]

3. 运算符优先级陷阱

3.1 优先级金字塔

**
+x/-x
* / // %
+ -
< <= > >= == !=
not
and
or

3.2 典型错误案例

案例1:混合算术与比较

print(5 + 10 * 2 == 25)  # 实际计算为5 + (10*2) = 25 → True
print(5 + 10 * 2 == 30)  # 新手可能误判 → False

案例2:逻辑运算顺序

flag1 = False
flag2 = True
print(flag1 == flag2 or flag1)  # → (False == True) → False → False or False → False
print(flag1 == (flag2 or flag1))  # → False == True → False

案例3:位运算符优先级

print(8 & 2 + 1)   # 等效于 8 & (2+1) → 0
print((8 & 2) + 1) # → 0 + 1 → 1

4. 最佳实践与调试技巧

4.1 避坑指南

  1. 括号显式优先
# 模糊表达式
result = x + y * z / 2

# 明确优先级
result = x + (y * z) / 2
  1. 分步计算验证
complex_expr = 3 ** 1 + 5 * 2 < 10 + 2 / 2
# 分解步骤:
# 步骤1:3**1 = 3
# 步骤2:5*2 = 10 → 3+10=13
# 步骤3:2/2=1 → 10+1=11
# 最终:13 < 11 → False

4.2 调试工具

AST查看器

import ast
print(ast.dump(ast.parse("1 < x < 5"), indent=2))
"""
Compare(
  left=Constant(value=1),
  ops=[Lt(), Lt()],
  comparators=[
    Name(id='x', ctx=Load()),
    Constant(value=5)])
"""

5. 运算符速查表

运算符类别运算符示例优先级
括号()最高
幂运算**
算术* / % //
加减+ -
比较== != < >较低
逻辑非not
逻辑与and最低
逻辑或or最低

下节预告:我们将深入探索Python的流程控制结构,通过构建一个智能温度预警系统来实践条件判断与循环的运用。


http://www.kler.cn/a/534190.html

相关文章:

  • 【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)
  • 【Leetcode】4. 寻找两个正序数组的中位数
  • vue 引入百度地图和高德天气 都得获取权限
  • llama.cpp GGUF 模型格式
  • 【学术投稿-2025年计算机视觉研究进展与应用国际学术会议 (ACVRA 2025)】从计算机基础到HTML开发:Web开发的第一步
  • Node.js与嵌入式开发:打破界限的创新结合
  • 根据SQL导出三线表文档
  • 能否通过蓝牙建立TCP/IP连接来传输数据
  • js-对象-JSON
  • [LeetCode] 二叉树 I — 深度优先遍历(前中后序遍历) | 广度优先遍历(层序遍历):递归法迭代法
  • 微服务知识——微服务架构的演进过程
  • 【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)
  • Mybatis之常用动态Sql语句
  • 云原生周刊:K8s引领潮流
  • Android 中APK 体积优化的几种方法
  • 【科研】 -- 医学图像处理方向,常用期刊链接
  • Python:温度转化
  • pandas习题 070:将数据库中大数据分块读取计算
  • 2.4学习
  • TCP三次握手、四次挥手过程及原理
  • swift 专题三 swift 规范一
  • 5.6 Mybatis代码生成器Mybatis Generator (MBG)实战详解
  • 在 Debian/Ubuntu 系统上,永久固定网口的IP地址
  • 基于 SpringBoot3 的 SpringSecurity6 + OAuth2 自定义框架模板
  • DeepSeek R1技术报告关键解析(8/10):DeepSeek-R1 的“aha 时刻”,AI 自主学习的新突破
  • Linux zcat 命令使用详解