Python 协程2025年3月17日 | 阅读 7 分钟 在本教程中,我们将学习 Python 中的协程。我们将详细讨论 Python 中的协程、子例程、协程执行和协程关闭。 在我们开始学习协程之前,我们必须对 Python 中的子例程有一个基本的了解。所以,在本教程中,我们将从 Python 子例程开始。 Python 子例程我们都知道 Python 中的函数,我们可能知道也可能不知道这些 Python 函数也称为过程、子进程或子例程。 通常,Python 中的函数是一系列打包的指令,它们作为一个单元执行以在代码中执行特定任务。当我们把一个复杂的函数逻辑分成几个独立的、像一个独特的函数(嵌套函数等)一样工作的步骤时,那么这些主函数中的辅助函数或嵌套函数就称为 Python 中的子例程。 我们通过主函数调用 Python 中的子例程,主函数负责在使用函数中的子例程时进行协调。Python 中的所有子例程只有一个入口点,即主函数的开始。 主函数 ![]() 看到上面给出的图后,我们可以轻易地得出结论:在使用子例程时,主函数需要协调子例程之间的工作,并且主函数也是 Python 中子例程的唯一入口点。 什么是协程?现在,在本节中,我们将讨论协程,它基本上是子例程的一种泛化。 协程通常用于进程的协作多任务处理,该进程会自愿地(yield)在一段时间内(周期性地)放弃控制权。当协程空闲时,它也用于允许多个应用程序同时运行。 ![]() 协程与线程不同,在协程中,由程序员和编程语言决定何时切换协程,而在线程的情况下,由操作系统调度线程之间的切换。 协程与子例程的区别
Python 中的协程协程与 Python 中的生成器非常相似,但协程在 yield(交出)语句上进行了一些修改,并增加了一些额外的方法。Python 协程也能消耗输入数据,而生成器只能为函数中的迭代生成数据。 在 Python 版本高于 2.5 的版本中,我们可以看到 yield 语句在协程中发生了一些小的变化,在此更改之后,yield 语句可以用作表达式。 示例:在右侧赋值 yield,即 LineOfCode = (yield) 我们发送到程序中协程的任何值都将被协程捕获并通过 yield 表达式返回。我们只能通过 send() 函数向协程发送值。 考虑下面程序中的协程,它将只打印前缀中带有“Officer”的名称,我们将使用 send() 函数将名称发送到协程。 示例 输出 Enter first name: Alex Enter second name: Officer Steve Rogers Enter third name: Officer Natasha Widow Coroutine object searching for the prefix: Officer Officer Steve Rogers Officer Natasha Widow 解释 - 因此,正如我们在上面的程序中所看到的,我们从用户那里获取了三个名字作为输入数据,我们通过 send() 方法将用户输入数据发送到了函数中定义的协程。我们在协程中使用“Officer”关键字来搜索名字中带有 Officer 前缀的名字,协程将只打印这些匹配的名字,正如我们在输出中看到的。 协程的执行在 Python 中,协程的执行与生成器非常相似。当我们调用程序中的协程时,什么也不会发生;它只会响应 send() 和 next() 函数。 我们可以清楚地从上面的例子中观察到,只有在我们调用程序中的 _next_() 方法后,协程才开始执行。调用协程后,执行会前进到 yield 第一个表达式。 之后,协程的执行会暂停,等待发送到协程对象的值。在将第一个值发送到协程对象后,它会检查是否需要的前缀存在,如果存在,则对象将打印带有前缀的名称。在打印名称后,它会进入一个连续的循环,直到再次遇到 name = (yield) 表达式。 关闭协程要关闭协程,我们必须在程序中使用 close() 函数。当我们关闭协程时,它将产生一个异常,即 GeneratorExit 异常,我们可以通过正常的异常捕获方式来捕获它。 示例 - 输出 Coroutine object searching for the prefix: Officer Officer Tony Stark Officer Steve Rogers Now we have closed the coroutine!! 我们必须记住,如果我们尝试在关闭协程后向协程对象发送值,程序将在输出中引发 StopIteration 异常。 通过链接协程创建管道结构我们可以使用协程来创建管道结构。在我们将协程链接在一起之后,我们可以使用 push() 方法将给定的数据推送到创建的管道结构中。要在程序中创建具有协程的管道结构,我们需要注意以下几点: 我们必须提供一个初始源,即生产者,它将衍生出完整的管道结构。通常,生产者本身不是协程,它们只是一个简单的方法。 我们必须在管道末端创建一个接收器,接收器将充当管道的终点。接收器是协程管道中的一点,它可能会收集所有输入数据并显示出来。 理解下面带有管道结构的协程程序。 示例 输出 I'm sink in the pipeline, and I am used to printing the tokens given. In the input sentence, we are searching for words that end with ing running moving We are done with filtering the given input sentence!! 解释 - 这样,我们就可以使用由多个协程创建的管道来过滤输入数据。过滤后的结果数据将在管道的接收器处显示,正如我们在上面的输出中看到的。 下一个主题Python 中的双下划线 |
由于机器学习和深度学习,计算机视觉经历了革命,使计算机能够理解和解释视觉数据。预处理训练数据集是为图像分类创建高效机器学习模型的关键过程之一。谷歌的开源 TensorFlow 机器学习框架……
阅读 6 分钟
Apriori 算法是一种机器学习算法,用于理解各种产品之间的关系模式。该算法最流行的用途是根据用户购物车中已有的商品来推荐商品。沃尔玛特别使用了该算法...
5 分钟阅读
在本教程中,我们将定义如何在 Python 中处理不同的时区。我们还将了解 Python 的本地时区。时区可以被描述为观察标准时间的地理区域。让我们对...做一个简短的介绍。
阅读 8 分钟
如何计算失业率?失业率是通过将失业人数占劳动力总数的比例来计算的,用于评估失业情况。在 COVID-29 期间,失业率显著上升,使其分析成为一项有价值的数据科学研究....
阅读 13 分钟
我们知道列表、元组和字典是 Python 中可用的数据结构,使我们能够以精确的方式构建冗长的代码。让我们快速回顾一下元组。元组是 Python 中一种不可变的数据结构,其元素...
阅读 3 分钟
什么是枚举?Python 中的枚举("enumeration" 的缩写)是表示一组唯一常量值的符号名称。它允许您定义一组相关值,与使用普通整数或字符串相比,这些值更具可读性和可维护性。枚举...
5 分钟阅读
strip() 功能是 Python 的一个预定义库功能。通过删除传递给 strip() 函数的开头和结尾的空格、字符和符号,它用于返回原始字符串的副本。换句话说,一组字符是...
阅读 4 分钟
在本教程中,我们将编写 Python 程序来查找给定列表中的更大元素。更大的元素是指数组中紧邻当前元素右侧且大于当前元素的元素。让我们看一下问题陈述。问题陈述给定一个...
阅读 3 分钟
情感分析是一个“计算确定”某篇文章是积极、中性还是消极的过程。它也称为意见挖掘。此过程确定段落中的句子是消极、积极还是中性。商业:营销公司使用它来制定策略、了解客户的...
阅读 3 分钟
由于 Python 加速了交易过程,这种方法被称为自动化交易或量化交易。Python 的流行归因于其强大的库,如 Pyplot、TA-Lib、Scipy、NumPy、Zipline、Matplotlib、Pandas 等。什么是自动化交易?自动化交易通过执行预设的程序来接受和...
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India