在 Python 中,迴圈(loop)是一种用来重复执行程式码区块的结构。Python 支援两种主要的迴圈结构:for 迴圈和 while 迴圈。
for item in sequence是一种迭代结构,可以遍历多种资料型态,包括列表(list)、字典(dictionary)、集合(set)和字串(string)等,在序列中的每一个项目上进行操作。
for...in 在各种资料型态的范例:
使用 for...in 列表(list)
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
#apple
banana
cherry
使用 for...in 字典(dictionary)
当使用字典进行迴圈时,可以遍历「键」或「键值对」。
- 遍历字典的键(key)
student_scores = {"Alice": 85, "Bob": 90, "Charlie": 78}
for student in student_scores:
print(student)
#Alice
Bob
Charlie
- 遍历字典的「键值对」
for student, score in student_scores.items():
print(f"{student} scored {score}")
#
Alice scored 85
Bob scored 90
Charlie scored 78
使用 for...in 集合 set
集合(set)是一种无序、不重复的资料型态,可以用来存放独特的值。
unique_numbers = {1, 2, 3, 4, 5}
for number in unique_numbers:
print(number)
#1
2
3
4
5
使用 for...in string
word = "hello"
for char in word:
print(char)
#h
e
l
l
o
使用 for...in tuple
coordinates = (10, 20, 30)
for coordinate in coordinates:
print(coordinate)
#10
20
30
更多 for in 迴圈与 Tuple 解构文章
使用 for...in range()
range() 是一个常用的函数,帮助产生数字序列。
for i in range(5):
print(i)
#0 1 2 3 4
更多for...in range() 文章
while 迴圈
while 迴圈会在条件为 True 时反覆执行代码,直到条件变为 False。
语法:
count = 0
while count < 5:
print(count)
count += 1
#0 1 2 3 4
巢状迴圈(nested loop)
在 Python 中,巢状迴圈(nested loop)是指「一个迴圈内包含另一个迴圈」的结构。这样的结构允许我们在一个迴圈内进行多重次的重复执行。巢状迴圈通常用来操作多维资料,例如表格、矩阵或列表中的列表。
基本巢状迴圈的结构
巢状迴圈的格式可以是 for 中再包含 for、while 中包含 while 或两者交叉使用。这里以 for 迴圈为例:
for i in range(3): # 外层迴圈
for j in range(2): # 内层迴圈
print(f"i={i}, j={j}")
输出:
i=0, j=0
i=0, j=1
i=1, j=0
i=1, j=1
i=2, j=0
i=2, j=1
break 和 continue 是用于控制迴圈流的关键字
break 关键字
作用: 立即结束迴圈,停止跳出目前所在的迴圈结构,不会执行剩余的迴圈内容。使用情境: 当找到所需的结果后,可以用 break 来避免不必要的重复执行,提高程式的效率。范例:
for num in range(1, 6):
if num == 3:
break # 当 num 等于 3 时,迴圈会停止
print(num)
#输出:1 2 当 num 等于 3 时,break 让迴圈结束,不会执行后面的数字。
continue 关键字
作用: 跳过目前迴圈的剩余内容,直接开始下一轮迴圈。使用情境: 当满足某个条件时, 跳过不执行该次的迴圈剩余内容,继续执行下一次迴圈。范例:
for num in range(1, 6):
if num == 3:
continue # 当 num 等于 3 时,跳过该轮迴圈
print(num)
#输出:1245 当 num 等于 3 时,continue 让该轮迴圈直接跳到下一轮,所以 3 没有被印出来。
break 和 continue 在 while 迴圈的使用
两者在 while 迴圈中的运作方式与在 for 迴圈中一样:
count = 0
while count < 5:
count += 1
if count == 3:
continue # 跳过 count 等于 3 的这一轮
elif count == 4:
break # 当 count 等于 4 时,结束迴圈
print(count)
#输出:1 2这里 continue 略过了 count 等于 3 时的输出,而 break 则在 count 等于 4 时直接结束迴圈。
pass
为什么要在迴圈中使用 pass?
- 佔位符: 当你还没有决定在某个迴圈迭代中要执行什么操作时,可以用 pass 来佔位,避免语法错误。
- 跳过某些迭代: 在条件判断中,如果你想让程式什么都不做,直接进入下一次迭代,就可以使用 pass。
for i in range(10):
if i % 2 == 0:
pass # 跳过偶数
else:
print(i)
在上面的例子中:
- 迴圈会迭代 10 次。
- 当 i 是偶数时,会执行 pass,也就是什么都不做,直接进入下一次迭代。
- 当 i 是奇数时,会执行 print(i),打印出 i 的值。
与 break 和 continue 的区别
pass: 跳过当前迭代,继续执行下一次迭代。break: 退出整个迴圈。continue: 跳过当前迭代的剩余部分,直接进入下一次迭代。
实际应用场景
暂时性跳过: 当你正在开发一个功能,但还没有完成,可以用 pass 来暂时跳过这部分,让程式可以继续执行。简化条件判断: 在某些情况下,使用 pass 可以让你的条件判断语句更简洁。符合 PEP 8 规范: 在一些情况下,使用 pass 可以让你的程式码更符合 PEP 8 规范,提高程式码的可读性。
为什么用 _ 作为变数?
在 Python 中,使用 _ 作为变数名是一个常见的惯例,特别是在以下几种情况下:
- 强调未使用: 当你在 for 迴圈中只关心迭代的过程,而不关心每次迭代的具体值时,用 _ 明确表示这个变数不会被使用。
- 避免命名冲突: 如果一个变数名在其他地方已经被使用,为了避免命名冲突,可以用 _ 来代替。
# 计算一个列表中的元素个数
numbers = [1, 2, 3, 4, 5]
count = 0
for _ in numbers:
count += 1
print(count)
在这个例子中,我们只关心计算列表中元素的个数,并不关心每个元素的值,所以用 _ 来表示迭代变数。
- 函数返回多个值: 当一个函数返回多个值时,你可以用 _ 来接收那些你不需要的值。
- 简化程式码: 这可以让你的程式码更简洁,更容易阅读。
# 获取一个文件的统计资讯
with open(\'file.txt\', \'r\') as f:
for line_num, line in enumerate(f):
_, word_count = line.split(), 0
for word in line.split():
word_count += 1
print(f"Line {line_num+1}: {word_count} words")
在这个例子中,我们用 _ 来接收 line.split() 返回的列表中的第一个元素(即行号),因为我们只需要字数。
class MyClass:
def __init__(self):
self._private_var = 42
_虽然在很多情况下表示一个临时变数,但它仍然是一个合法的变数名。在某些特定的上下文中,_ 可能有其他的含义。虽然使用 _ 是个好习惯,但过度使用也可能让程式码变得晦涩难懂。
建议:
在选择变数名时,要根据具体的上下文和程式逻辑来决定是否使用 _。如果一个变数确实不需要使用,那么用_ 来表示是一个不错的选择。希望这个更详细的解释能帮助你更好地理解 _在 Python 中的用法。