在 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() 返回的列表中的第一个元素(即行号),因为我们只需要字数。

  • 表示私有变数在类中: 在 Python 中,虽然没有严格的私有变数概念,但通常用 _ 开头的变数名来表示私有变数,提醒其他程式码不要直接访问。
  • class MyClass:
    def __init__(self):
    self._private_var = 42

  • 表示翻译的字符串在多语言环境: 在一些框架或库中,_ 可能用于标记需要翻译的字符串。总结_ 在 Python 中是一个有特殊意义的变数名。它通常用来表示不需要使用的变数、丢弃不需要的返回值、表示私有变数或标记翻译的字符串。使用 _ 可以让你的程式码更清晰、更易于理解。需要注意的是:
  • _虽然在很多情况下表示一个临时变数,但它仍然是一个合法的变数名。在某些特定的上下文中,_ 可能有其他的含义。虽然使用 _ 是个好习惯,但过度使用也可能让程式码变得晦涩难懂。

    建议:

    在选择变数名时,要根据具体的上下文和程式逻辑来决定是否使用 _。如果一个变数确实不需要使用,那么用_ 来表示是一个不错的选择。希望这个更详细的解释能帮助你更好地理解 _在 Python 中的用法。