知道如何正确退出循环是一项重要技能。继续阅读以了解控制循环所需的工具。

在本文中,我们将向您展示在 Python 中终止循环的一些不同方法。乍一看这可能有点微不足道,但有一些关于控制语句的重要概念需要理解。我们还将介绍一些鲜为人知的在 Python 中结束循环的方法,为您提供更好地控制程序执行方式的工具。

如果您是 Python 初学者,我们建议您从 本文 学习我们使用的一些术语。或者,您也可以查看 这门课程 ,它非常适合初学者,因为它假设您没有任何编程知识或任何 IT 经验。

使用 for 循环进行迭代

这里的切入点是使用 for 循环执行迭代。for 循环是 Python 中最重要的基本概念之一。您会在很多情况下遇到它们,了解它们的工作原理是重要的第一步。

对于刚接触 Python 的人来说, 这篇关于 for 循环的文章 是个不错的起点。基本上,for 循环是一种迭代数据集合的方法。数据可能是数字,例如浮点数或整数,甚至是文本数据,并且可以存储在不同的结构中,包括列表、元组、集合和字典。有关这些数据结构的更多深入材料,请查看 本课程 .

不到最后一刻,一切还不算结束

这种语言上的同义反复是许多比赛中的弱者的口头禅。这也是我们讨论如何在 Python 中结束循环的第一站。我们可以用上面提到的任何数据结构定义一个可迭代对象来循环。或者,我们也可以使用内置的 range () ,它返回一个不可变的序列。有关使用内置函数的一些实际练习,请查看 本课程 .

range() 接受 3 个整数参数: start (可选,默认为 0)、 stop (必需)和 step (可选,默认为 1)。它返回一个具有预定义元素数量的序列。

我们可以按如下方式循环遍历序列中的元素:

>>> for i in range(-2, 11, 3):
>>>     print(i)
-2
1
4
7
10

这个例子有几个有趣的地方。首先,参数可以是负数。你甚至可以指定一个负数步长来倒数。自己试试吧。其次,不需要达到准确的停止值。在上面的例子中,我们从 -2 开始按序列前进,步长为 3,然后我们在 10 处停止。这是在定义的停止值 11 之前,但额外的步长 3 使我们超出了停止值。这是在 Python 中结束循环的最明显方法——在预定义的迭代次数之后。

iter() 来替代 for 循环 next() 。前者从可迭代对象定义迭代器,后者返回迭代器的下一个元素。一旦我们从迭代器返回最后一个元素,循环或迭代就完成了。 next() 此后调用会引发 StopIteration 异常。由于可迭代对象不存储在内存中,因此您只能使用这些函数迭代一次,但在处理大量数据时,这种方法效率更高。如果您想查看一些有关如何应用这两个函数进行高效循环的具体示例,请查看 本文 .

循环控制语句

休息

break 语句是 Python 中三个循环控制语句中的第一个。它与条件语句 (if-elif-else) 结合使用,以便在满足某些条件时提前终止循环。具体来说,break 语句提供了一种在迭代结束之前完全退出循环的方法。以下示例演示了此行为:

>>> for i in range(5):
>>>     if i == 3:
>>>         break
>>>     print(i)
>>> print('Finished')
0
1
2
Finished

我们 range() 通过仅指定必需的 停止 参数来使用。在这种情况下,和 start 参数 step 分别采用其默认值 0 和 1。简单地循环 range(5) 将打印值 0 – 4。相反,我们检查元素是否等于 3,如果是,break 语句将完全停止循环。最后一行 print('Finished') 位于循环之外,因此在循环中断后仍会执行。

继续

将其与 continue 语句进行对比,如下所示:

>>> for i in range(5):
>>>     if i==3:
>>>         continue
>>>     print(i)
>>> print('Finished')
0
1
2
4
Finished

一旦第二行中的条件计算为 True,该 continue 语句就会跳过 print 循环内的语句。然后它在下一个元素处继续循环。当到达最后一个元素时,循环结束。如果您希望循环完成但只想跳过部分元素,这很方便。如上所示,循环下方和循环外部的任何代码仍会执行。

经过

第三个循环控制语句是 pass 。严格来说,这不是在 Python 中退出循环的方法。但是,值得一提的是,它经常出现在与其他控制语句类似的上下文中。尝试使用 pass 语句代替 来执行上述示例 continue ,您会注意到由 定义的所有元素 range() 都打印到屏幕上。 pass 语句用作您可能希望稍后在其位置添加的代码的占位符。

使用 Python 前往紧急出口

到目前为止,我们看到的功能演示了如何在 Python 中退出循环。如果您想在到达结尾之前完全退出程序,sys 模块通过该函数提供了该功能 exit() 。调用此函数会引发 SystemExit 异常并终止整个程序。

sys.exit() 接受一个可选参数。它可以是整数或字符串,可用于将错误消息打印到屏幕上。

我们来看一个例子:

>>> import sys
>>> for i in range(5):
>>>     if i == 3:
>>>         sys.exit('Error message')
>>>     print(i)
>>> print('Finished')
0
1
2
SystemExit: Error message

在此上下文中, sys.exit() 其行为类似于前面示例中的 break,但也会引发异常。因此,此示例中 for 循环外部的最终打印语句未执行。整个程序只是终止。

循环列表

循环中执行的常见操作是修改数据结构(例如列表)。如果您想在循环期间从列表中删除元素,您可能会发现自己需要使用 del 关键字,尤其是如果您有其他编程语言(例如 C++ 或 Java)的背景。

这是一个非常方便的工具,因为它可以从数据结构中删除元素,也可以删除本地或全局变量。但如果您在循环过程中更改列表,则可能会有点棘手。

考虑以下示例,我们想从数字列表中删除所有奇数:

>>> numbers = [1, 1, 2, 3, 4, 5, 6]
>>> for i in range(len(numbers)):
...     if numbers[i] % 2 != 0:
...         del numbers[i]

执行此代码将产生 IndexError: list index out of range 。我们已将循环定义为执行 7 次迭代(列表的长度)。由于我们用 来定义它 range() ,因此它是不可变的。在循环期间,我们开始从列表中删除元素,这会改变其长度。现在它的元素数少于我们要迭代的序列。此外,如果您花点时间考虑一下这个例子,您会发现第二个 1 不会被删除,因为它会滑到 0 位置,而循环会转到索引为 1 的位置。

为了解决所有这些问题,我们可以使用一个巧妙的技巧,使用内置函数以相反的顺序迭代元素 reversed()

>>> numbers = [1, 1, 2, 3, 4, 5, 6]
>>> for i in reversed(range(len(numbers))):
... 	if numbers[i] % 2 != 0:
...     	del numbers[i]

reversed() 函数返回一个迭代器,我们在文章前面提到过。或者,你可以使用它 range() 在迭代过程中向后计数,就像我们前面提到的那样。这些方法从列表末尾删除元素,确保当前列表索引永远不会大于列表的长度。

或者更好的是,我们可以使用最 Pythonic 的方法,即列表推导式,其实现如下:

>>> numbers = [1, 1, 2, 3, 4, 5, 6]
>>> numbers = [num for num in numbers if num % 2 == 0]

对于那些以前没见过这种魔法的人来说,它相当于定义一个列表,使用 for 循环,测试一个条件,然后附加到列表中。通常,这需要 4 行。但是使用列表推导,我们只需一行就可以实现这一点!

在 Python 中获得更多控制并结束循环

本讨论主要关注如何在 Python 中退出循环 - 具体来说,如何在 Python 中退出 for 循环。我们希望鼓励您采取下一步行动并应用您在此处学到的知识。

之前 说过的 ,从小步骤开始,然后逐步实现更复杂的示例。尝试使用 while 循环进行实验。您可能会发现有一种更基本的退出 while 循环的方法,这种方法不适用于 for 循环 - 当语句定义的条件 while 求值为 False .

作为另一个扩展,测试一下使用嵌套 for 循环和控制语句时会发生什么。您会发现您可以修改一个循环,而另一个循环继续正常执行。经过一点练习,您将掌握如何在 Python 中结束循环。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部