表达式求值产生结果,语句执行动作;表达式如1+2、len("hello")返回值,语句如if、for、def不返回值,不可用于需值的上下文。

Python里表达式和语句常被混用,但它们角色不同:表达式求值产生结果,语句执行动作。理解这个区别,才能写出更清晰、更少副作用的代码。
表达式:有结果,能嵌套
表达式是能计算出一个值的结构,比如 1 + 2、len("hello")、x if x > 0 else -x。它本身不改变状态,只返回值。
常见表达式类型包括:
- 算术表达式:3 * 4 - 5
- 比较表达式:a == b and c != d
- 成员/身份表达式:"py" in "python"、x is None
- 条件表达式(三元):"even" if n % 2 == 0 else "odd"
- 调用表达式:print("hi")(注意:虽有副作用,仍是表达式)
⚠️ 注意:print() 是函数调用表达式,返回 None。所以 x = print("hi") 后,x 的值是 None,不是字符串。
立即学习“Python免费学习笔记(深入)”;
语句:做事情,不返回值
语句是执行某种操作的指令,不产生可被使用的值。Python 解释器会执行它,但不会把它当作“结果”传递给别的地方。
典型语句包括:
10分钟内自己学会PHP其中,第1篇为入门篇,主要包括了解PHP、PHP开发环境搭建、PHP开发基础、PHP流程控制语句、函数、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、日期和时间等内容;第2篇为提高篇,主要包括MySQL数据库设计、PHP操作MySQL数据库、Cookie和Session、图形图像处理技术、文件和目录处理技术、面向对象、PDO数据库抽象层、程序调试与错误处理、A
- 赋值语句:x = 10、a, b = 1, 2(解包也是语句)
- 控制流语句:if、for、while、break、continue
- 函数定义:def func(): ...
- 类定义:class MyClass: ...
- 导入语句:import math、from os import path
? 关键点:你不能把语句直接放在需要值的位置。例如 result = if x > 0: 1 else 0 是语法错误——if 是语句,不能出现在等号右边;必须改用条件表达式:result = 1 if x > 0 else 0。
表达式语句:单独成行的表达式
当一个表达式单独写在一行时,它就构成“表达式语句”,比如:
- 42
- max(1, 2, 3)
- [x**2 for x in range(5)]
这类语句会被计算,结果通常被丢弃(除非在交互式环境里,解释器会自动打印)。它们常用于调试或触发副作用(如 logging.debug("here")),但不建议依赖其返回值做逻辑判断。
容易踩坑的地方
初学者常误把语句当表达式用,导致 SyntaxError 或逻辑错误:
- 在列表推导中写 if 语句(错)→ 应该用条件过滤:[x for x in nums if x > 0]
- 想用 print() 当值传给函数:func(print("x")) → 实际上传的是 None,应拆成两步
- 混淆 is 和 ==:前者比身份,后者比值;[] is [] 是 False,但 [] == [] 是 True
- 在 lambda 中只能写表达式,不能写语句(所以没有 if 语句,只有 if-else 表达式)
掌握表达式与语句的边界,能让代码更符合 Python 的直觉,也更容易被他人读懂。









