掌握程序中的流程控制是编程的基础。Python 提供了简洁且富有表达力的方式来管理条件执行和循环迭代表达,这些方式通常被称为“Pythonic”的。对于熟悉Java等语言的开发者来说,理解这些Python特有的表达方式尤为重要。
一、条件判断 (if/elif/else
)
<a name="1-条件--ifelifelse--"></a>
1.1 基本语法与 elif
Python的条件语句使用 if
、elif
(等同于Java的 else if
)和 else
关键字,并依赖冒号和缩进来定义代码块。
# 示例
score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
else:
grade = 'D'
print(f"学生的等级是: {grade}")
值得注意的是,Python没有 switch-case
语句。多条件分支通常通过 if-elif-else
链来实现,其条件可以是任意返回布尔值的表达式,提供了更大的灵活性。
1.2 Pythonic特性:链式比较与真值测试
-
链式比较: Python允许更自然的链式比较,例如
min_val <= x < max_val
,这等价于x >= min_val and x < max_val
,但可读性更佳。 -
my_list = [] if my_list: # my_list为空,条件为False print("列表不为空") else: print("列表为空") # 这行会被打印 name = "Python" if name: # name非空,条件为True print(f"名称是: {name}") # 这行会被打印
二、for
循环 (迭代思维)
<a name="2-for-循环-迭代思维"></a>
2.1 Pythonic for
循环:遍历可迭代对象
Python的 for
循环是典型的 "for-each" 风格:for item in iterable: ...
。它直接遍历可迭代对象(如列表、元组、字符串、字典的键、集合等)中的每一个元素。
- vs. Java:
- 与Java的增强型
for
循环 (for (ElementType item : iterableCollection) { ... }
) 在理念上最为接近。 - 与Java传统的C风格
for
循环 (for (int i = 0; i < n; i++) { ... }
) 机制完全不同。Python的for
循环不显式管理索引变量的初始化、条件判断和递增。
- 与Java的增强型
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 遍历字符串
for char in "Python":
print(char, end=' ') # P y t h o n
print()
# 遍历字典的键 (默认) 或项
my_dict = {'a': 1, 'b': 2}
for key in my_dict: # 默认遍历键
print(f"键: {key}, 值: {my_dict[key]}")
# 更Pythonic的方式遍历键值对
for key, value in my_dict.items():
print(f"键: {key}, 值: {value}")
2.2 使用 range()
进行计数循环
若需要执行固定次数的循环或按索引访问序列(尽管通常不推荐后者,提倡直接迭代元素),可以使用 range(start, stop, step)
函数生成一个数字序列进行迭代。
range(stop)
: 生成从0
到stop-1
的序列。range(start, stop)
: 生成从start
到stop-1
的序列。range(start, stop, step)
: 生成从start
到stop-1
,步长为step
的序列。
for i in range(5): # 0, 1, 2, 3, 4
print(i, end=' ')
print()
# 不推荐的索引访问方式 (对比直接迭代)
my_sequence = ['x', 'y', 'z']
for i in range(len(my_sequence)):
print(my_sequence[i])
# 更Pythonic的带索引迭代方式
for index, item in enumerate(my_sequence):
print(f"索引 {index}: {item}")
2.3 循环变量作用域
在Python中,for
循环的临时变量 (如上例中的 fruit
, char
, key
, value
, i
, index
, item
) 在循环结束后依然存在于当前作用域,并保留其最后一次迭代的值。
- vs. Java: Java中
for(int i=0;...)
定义的i
其作用域通常仅限于该for
循环块内部。
for i in range(3):
pass
print(f"循环结束后 i 的值: {i}") # 输出: 循环结束后 i 的值: 2
三、while
循环
<a name="3-while-循环"></a>
Python的 while 循环语法为 while condition: ...,只要条件 condition 为真,循环就会继续执行。其逻辑与Java的 while 循环相同,主要差异在于冒号和强制缩进。
count = 0
while count < 3:
print(f"Count is: {count}")
count += 1
# 输出:
# Count is: 0
# Count is: 1
# Count is: 2
四、跳转语句与循环 else
特性
<a name="4-跳转与循环-else"></a>
4.1 break
与 continue
break
: 立即终止整个当前循环 (包括for
或while
)。continue
: 立即结束当前迭代,并开始下一次迭代。
这两个关键字的行为与在Java中类似。
for i in range(10):
if i == 5:
break # 当 i 等于 5 时,终止循环
if i % 2 == 0:
continue # 如果 i 是偶数,跳过本次迭代的print语句
print(i) # 只会打印奇数 1, 3
4.2 Python特有:循环 else
子句
for
和 while
循环都可以带有一个可选的 else
块。这个 else
块中的代码仅在循环正常结束(即没有被 break
语句中断)时才会执行。
- 用途: 常用于搜索场景。如果循环找到了目标并通过
break
退出,则else
不执行;如果循环遍历了所有元素都没有找到(即循环正常结束),则else
块执行(例如打印“未找到”信息)。
# 示例1: 循环正常结束
for i in range(3):
print(f"Iteration {i}")
# if i == 5: # 这个条件永远不会满足
# break
else:
print("循环正常结束 (没有触发break)") # 这行会被打印
# 示例2: 循环被 break 中断
for i in range(5):
print(f"Searching for 3, current is {i}")
if i == 3:
print("找到了!")
break # 循环被break中断
else:
print("循环结束,但没有找到3 (此行不会被打印)")
# 示例3: while 循环与 else
num = 10
while num > 5:
print(num)
num -= 1
if num == 7: # 模拟一个break条件
# break
pass
else:
print("While 循环正常结束") # 如果上面break注释掉,则会打印
这种循环 else
结构是Python独有的一个优雅特性,可以使某些逻辑的表达更为清晰。
Comments NOTHING