Python 基础语法核心:运算符与控制流
Python 是一门解释型、面向对象且动态数据类型的高级编程语言。其语法简洁清晰,强调代码的可读性。掌握运算符、条件语句、循环结构以及异常处理机制是编写高质量 Python 代码的基础。
一、运算符详解
运算符用于执行各种数学和逻辑操作。Python 支持多种类型的运算符,包括算术、赋值、比较、逻辑等。
1. 算术运算符
算术运算符用于执行基本的数学运算。下表列出了常用的算术运算符及其优先级规则。
| 运算符 | 描述 | 实例 | 备注 |
|---|---|---|---|
| + | 加 | 1 + 1 输出结果为 2 | 双目运算符 |
| - | 减 | 1 - 1 输出结果为 0 | 双目运算符 |
| * | 乘 | 2 * 2 输出结果为 4 | 双目运算符 |
| / | 除 | 10 / 2 输出结果为 5.0 | 结果总是浮点数 |
| // | 整除 | 9 // 4 输出结果为 2 | 向下取整 |
| % | 取余 | 9 % 4 输出结果为 1 | 返回除法余数 |
| ** | 指数 | 2 ** 4 输出结果为 16 | 幂运算 |
| () | 小括号 | (1 + 2) * 3 输出结果为 9 | 提高优先级 |
混合运算优先级顺序:
() > ** > * / // % > + -
由于算术运算符是双目运算符,即有两个操作数参加运算,当参加运算的两个操作数的类型不一致时,Python 会首先尝试将两个操作数转换为同一类型,然后进行运算。转换的基本规则如下:
- 如果参加算术运算的两个操作数中有一个是复数,则把另一个也转换为复数;
- 如果两个操作数中有一个是浮点数,则把另一个也换成浮点数;
- 如果两个操作数中有一个是长整数,则把另一个也转换成长整数。
注意: 转换时不同类型之间的转换必须遵守一定方向,例如不可以把一个浮点数隐式转换为一个整数(除非显式调用 int()),也不能把一个复数转换为其它数值类型而不丢失精度。
2. 赋值运算符
赋值运算符用于将值赋给变量。Python 支持多种赋值方式。
单个变量赋值(简单赋值)
num = 1
print(num)
多个变量赋值(序列解包)
在序列赋值语句中,等号左侧是元组或列表表示的多个变量,等号右侧是元组、列表或字符串等序列表示的数据。Python 按先后顺序依次将数据赋值给变量。
num1, float1, str1 = 10, 0.5, 'hello world'
print(num1) # 10
print(float1) # 0.5
print(str1) # hello world
注: 等号右侧为字符串时,Python 会将字符串分解为单个字符,依次赋值给各个变量,此时,变量个数和字符个数必须相等,否则会报错 ValueError: not enough values to unpack。
a, b, c, d, f = 'hello' # 正确
# a, b, c = 'hello' # 错误:值太多
序列赋值时,可以在变量名之前使用 *,不带星号的变量仅匹配一个值,剩余的值作为列表赋值给带星号的变量。这被称为'扩展解包'。
a, b, *c = 'hello'
print(a) # h
print(b) # e
print(c) # ['l', 'l', 'o']
多变量赋相同值(多目标赋值)
a = b = 10
print(a) # 10
print(b) # 10
3. 复合赋值运算符
复合赋值运算符结合了算术运算和赋值操作,使代码更简洁。
| 运算符 | 描述 | 等价表达式 |
|---|---|---|
| += | 加法赋值 | 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 |
4. 比较运算符
比较运算符用于比较两个值,返回布尔值 True 或 False。
| 运算符 | 描述 |
|---|---|
| == | 等于。如果两个操作数的结果相等,则为 True |
| != | 不等于。如果两个操作数的结果不相等,则为 True |
| > | 大于。左侧操作数大于右侧操作数 |
| < | 小于。左侧操作数小于右侧操作数 |
| >= | 大于等于。左侧操作数大于等于右侧操作数 |
| <= | 小于等于。左侧操作数小于等于右侧操作数 |
5. 逻辑运算符
逻辑运算符用于组合布尔表达式。
| 运算符 | 逻辑表达式 | 描述 | 实例 |
|---|---|---|---|
| and | x and y | 布尔'与':x 和 y 均为 True,结果为 True | True and False 返回 False |
| or | x or y | 布尔'或':x 和 y 均为 False,结果为 False | True or False 返回 True |
| not | not x | 布尔'非':如果 x 为 True,返回 False | not True 返回 False |
短路求值: Python 的逻辑运算符具有短路特性。例如 A and B,如果 A 为假,则直接返回 A,不再计算 B;A or B,如果 A 为真,则直接返回 A,不再计算 B。
6. 三元运算符
在 Python 中,三元运算符(也称为条件表达式)是一种简洁的方式来编写条件赋值。
语法结构:
value_if_true if condition else value_if_false
示例:
x = 10
y = 20
max_value = x if x > y else y # 输出:20
二、条件语句(if-elif-else)
条件语句允许程序根据特定条件的真假来执行不同的代码块。
1. if 语句
if 条件:
# 条件成立执行的代码
print("条件满足")
2. if...else...
if 条件:
# 条件成立执行的代码
pass
else:
# 条件不成立执行的代码
print("条件不满足")
3. 多重判断 (elif)
if 条件 1:
# 条件 1 成立执行的代码
pass
elif 条件 2:
# 条件 2 成立执行的代码
pass
else:
# 以上条件都不成立执行的代码
print("默认情况")
4. if 嵌套
if 条件 1:
if 条件 2:
# 两个条件都成立
print("双重满足")
注意事项:
- Python 使用缩进来表示代码块,通常使用 4 个空格。
- 任何非零数字、非空字符串、非空容器都被视为真(Truthy),而 0、None、空字符串、空列表/字典被视为假(Falsy)。
三、循环语句(for、while)
循环语句用于重复执行一段代码,直到满足特定条件为止。
1. for 循环
for 循环是 Python 中最常用的循环语句之一,可以遍历任何可迭代对象,如列表、元组、字符串、字典等。
基本语法:
for variable in sequence:
# 循环体
pass
[else]
# 循环体(仅在循环正常结束时执行)
示例:
# 遍历列表或元组
for number in [1, 2, 3, 4, 5]:
print(number ** 2)
# 遍历字符串
for char in "hello world":
print(char.upper())
# 遍历字典
my_dict = {'apple': 2, 'banana': 3}
for key, value in my_dict.items():
print(f"{key}: {value}")
# 遍历文件内容
with open('file.txt', 'r') as f:
for line in f:
print(line.strip())
2. while 循环
while 循环基于条件表达式是否成立来决定是否继续执行。
基本语法:
while 条件:
# 循环体
pass
[else]
# 循环体
示例:
fruits = ['apple', 'banana', 'orange']
i = 0
while i < len(fruits):
print(fruits[i])
i += 1
3. 循环控制语句
- break 语句: 立即跳出当前循环,终止整个循环过程。如果从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
- continue 语句: 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
- pass 语句: 空语句,是为了保持程序结构的完整性,pass 不做任何事情,一般用做占位语句。
循环 Else 子句: Python 特有的功能。当循环正常结束(即没有被 break 中断)时,else 块才会执行。
四、异常的捕获和处理(try-except-finally)
异常处理机制允许程序在发生错误时优雅地处理问题,而不是直接崩溃。
1. try-except 结构
- try 语句: 包含可能会引发异常的代码块。如果在
try代码块中发生异常,程序将立即跳转到except代码块。 - except 语句: 捕获并处理特定类型的异常。异常对象被赋值给变量,可用于获取错误信息。
- else 语句: 指定当没有异常发生时要执行的代码块。
- finally 语句: 指定无论是否发生异常都必须执行的代码块,常用于资源清理(如关闭文件、数据库连接)。
2. 自定义异常
开发者可以创建继承自 Exception 类的自定义异常类,以便根据应用程序需求引发和捕获特定的错误。
代码示例:
# 自定义异常类
class MyCustomError(Exception):
def __init__(self, message):
self.message = message
super().__init__(self.message)
try:
# 可能会引发异常的代码块
some_condition = False
if some_condition:
raise MyCustomError("This is a custom error")
result = 10 / 0 # 除以零会引发 ZeroDivisionError
except MyCustomError as e:
print(f"Custom error occurred: {e.message}")
except ZeroDivisionError as e:
print(f"Division by zero error: {e}")
except Exception as e:
# 捕获其他所有未处理的异常
print(f"An unexpected error occurred: {type(e).__name__}")
else:
# 当没有异常发生时要执行的代码块
print(f"Result is {result}")
finally:
# 无论是否发生异常都必须执行的代码块
print("Cleanup resources here")
3. 最佳实践
- 避免使用裸
except:,应明确捕获具体的异常类型,防止掩盖编程错误。 - 在 finally 块中释放外部资源,或使用上下文管理器(
with语句)自动管理资源。 - 记录异常日志,便于后续排查问题。
五、总结与建议
本文详细解析了 Python 中的核心运算符、条件语句、循环结构及异常处理机制。在实际开发中,建议遵循以下原则:
- 代码可读性: 合理使用缩进和注释,保持逻辑清晰。
- 健壮性: 对可能出错的操作添加异常捕获,防止程序意外终止。
- 性能优化: 在循环中避免不必要的计算,优先使用内置函数和生成器。
- 规范命名: 变量和函数名应语义明确,符合 PEP 8 规范。
通过熟练掌握这些基础语法,开发者能够构建出结构严谨、易于维护的 Python 应用程序。


