python协程:yield实现协程执行、生成器取值的三种方式

yield关键字执行流程

注意:yield关键字的调用次数如果超过了任务执行次数会报错,提示stopiteration异常,例如
在这里插入图片描述
正常范围内的任务执行


# 定义一个任务(函数1)
def task1():for i in range(3):print(f'----task1 i = {i}----')# yield 关键字会造成当前函数称为一个生成器对象# yield 会将当前任务函数挂起,不继续向下执行,CPU不再回等待挂起结束的任务yield# 定义一个任务(函数2)
def task2():for i in range(3):print(f'----task2 i = {i}----')yieldif __name__ == '__main__':# 现在的程序只有一条主线程(IO并发操作)# 任务(函数)t1 = task1()   # task1()不是调用函数,函数中只要有yield关键字,就变成了返回生成器对象t2 = task2()# <generator object task1 at 0x0000025C5A565A80># print(t1)# <generator object task2 at 0x0000025C5A567C40># print(t2)# 如果是一个生成器对象,函数如何执行?# yield关键字需要配合 next 内置函数实现调用next(t1)next(t2)# 第二次调用next(t1)next(t2)# 第三次调用next(t1)next(t2)# 第四次调用# next(t1)# next(t2)

执行结果
在这里插入图片描述

生成器取值的三种方式(next、循环+next、循环)

# 1,1,2,3,5,8,13,21,34...斐波那契数列,后面第三个数是前两个数和# 生成器对象,使用了yield关键字,当前函数已经成为了生成器对象
def fibonacci(n):a,b = 1,1current_n = 0while current_n < n:yield aa, b = b, a + bcurrent_n += 1# 退出循环,已经完成了执行,让函数返回一个结果# 最终生成器的返回结果是在发生异常的时候返回的return 'done'if __name__ == '__main__':v = fibonacci(5)print(v)print(next(v))print(next(v))print(next(v))print(next(v))print(next(v))# print(next(v)) StopIteration: doneprint('-' * 20)v2 = fibonacci(5)while True:try:g = next(v2)print(g)except StopIteration as e:print(e)  # 这里的e就是生成器的一场结果break# 生成器对象就是一个可迭代对象print('-' * 20)for i in fibonacci(5):print(i)

执行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87172.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf删除一页 python实现(已验证)

首先安装库 使用PyPDF2 首先&#xff0c;确保你已经安装了PyPDF2。如果没有安装&#xff0c;可以通过pip安装&#xff1a; pip install PyPDF2 然后运行 import PyPDF2def remove_page(input_pdf_path, output_pdf_path, page_number_to_remove):# 打开PDF文件with open(i…

2025.1版本PyCharam找不到已存在的conda虚拟环境

前言 创建Python项目指定conda虚拟环境是最常用的操作,我下载的2025.1版本PyCharam编译器找不到我已经创建好的conda虚拟环境,解决方法如下 目录 问题描述 问题解决 总结 问题描述 我使用2025.1版本PyCharam编译器创建项目指定已经存在的虚拟环境出现如下情景 说是我没有…

开机启动项在哪里设置 实用步骤分享

电脑开机时&#xff0c;系统会自动运行一系列程序&#xff0c;其中包括必要的系统进程和用户自行添加的启动项。然而&#xff0c;过多的启动项可能会导致开机速度变慢&#xff0c;影响系统性能。因此&#xff0c;合理管理开机启动项&#xff0c;可以优化电脑的运行效率。电脑开…

LeetCode--39.组合总和

前引&#xff1a;明天就考最后一趟考试&#xff0c;最近考试周&#xff0c;我时时断更&#xff0c;从明天开始&#xff0c;就会一直更新了&#xff0c;可以期待一下 解题思路&#xff1a; 1.获取信息&#xff1a; 给定一个无重复的整数数组和一个目标值 从数组中选取任意数量的…

Visual Studio2022和C++opencv的配置保姆级教程

1.c桌面开发和windows平台开发&#xff08;Visual Studio2022安装时&#xff09; 2.下载OPenCV 3.系统属性→添加环境变量→Path 4.VS2022配置opencv 5.项目→属性→VC目录中的包含目录和库目录 5.项目→属性→VC目录中的包含目录和库目录 包含 目录添加&#xff1a; D:\…

使用Ansible的playbook安装HTTP

实验环境 安装好ansible 一、准备测试服务&#xff08;192.168.10.41&#xff09; 1、安装HTTP服务 dnf -y install httpd 2、启动HTTP服务 systemctl start httpd 3、使用浏览器访问 192.168.10.41 因为开启了防火墙&#xff0c;所有无法访问 4、开放防火墙的80端口 …

V少JS基础班之第六弹

一、 前言 第六弹内容是闭包。 距离上次函数的发布已经过去了一个多月&#xff0c; 最近事情比较多&#xff0c;很少有时间去写文章&#xff0c; 低质量还得保证所以本章放草稿箱一个月了&#xff0c;终于补齐了&#xff0c;其实还有很多细节要展开说明&#xff0c;想着拖太久…

【面板数据】全国高频交易明细数据(2000-2024.7)

中国土地交易市场作为国家宏观调控的重要组成部分&#xff0c;其通过市场机制&#xff0c;使土地使用权在不同主体间流转&#xff0c;将土地资源配置给最具利用效率的部门或企业&#xff0c;提升土地利用率和经济产出。中国土地高频交易明细数据汇集了全国范围内2000-2024年7月…

MongoDB 常用增删改查方法及示例

MongoDB 的增删改查&#xff08;CRUD&#xff09;操作是其核心功能&#xff0c;主要通过 mongo shell 或驱动&#xff08;如 Node.js、Python 等&#xff09;实现。以下是最常用操作的详细说明及示例&#xff08;基于 mongo shell 语法&#xff09;。 ​一、插入操作&#xff…

moodle升级(4.5到5.0)

升级目标 由Moodle 4.5 (Build: 20241129) 升级到Moodle 5.0.1 (Build: 20250629) 参考教程&#xff1a;moodle升级&#xff08;详细版&#xff09;-CSDN博客 操作平台&#xff1a;宝塔 通过宝塔进行备份 备份文件 将/www/wwwroot/moodle 和/www/wwwroot/moodledata 复制…

基于Apache POI实现百度POI分类快速导入PostgreSQL数据库实战

## 引言:POI数据的价值与挑战 POI(Point of Interest)数据作为地理信息系统的核心要素,在智慧城市、位置服务、商业分析等领域具有重要价值。百度POI数据包含了丰富的地点信息(如名称、类别、坐标等),但如何高效处理这些数据并将其导入数据库进行分析是开发者面临的挑战…

linux LAMP 3

[rootcode apache2]# bin/apachectl AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using fe80::20c:29ff:fe2a:708a. Set the ‘ServerName’ directive globally to suppress this message root192.168.235.5s password:┌─…

UI自动化-Selenium WebDriver

前言 Selenium WebDriver 是 Selenium 项目中最核心、最强大的组件&#xff0c;它是一个用于自动化控制网页浏览器的开源 API&#xff08;应用程序编程接口&#xff09;。 简单来说&#xff0c;Selenium WebDriver 就是一个允许你用编程语言&#xff08;如 Java、Python、C#、…

具身多模态大模型在感知与交互方面的综述

引言在本学期方老师的《机器人与大模型》课上&#xff0c;我首次接触到了关于具身智能的前沿知识&#xff0c;尤其作为课上交互组的成员&#xff0c;从表情识别到语音交互到机械狗的开发实践进行了一些有意思的探索&#xff0c;使我在其中感受到了具身智能的巨大魅力和无限潜力…

UI 设计|审美积累 | 拟物化风格(Skeuomorphism)

拟物化是指把现实世界的材质、光影和结构带到数字界面中。木纹、金属、皮革、纸张等真实物体的质感&#xff0c;被细致地还原到屏幕上&#xff0c;让用户一眼就明白元素的意义与操作方式。它曾是iOS6之前移动端设计的主流风格&#xff0c;也一度被极简风格取代&#xff0c;但在…

EventBridge精准之道:CloudTrail事件 vs. 服务原生事件,我该如何选?

当我们深入使用AWS EventBridge时&#xff0c;常常会发现一个有趣的现象&#xff1a;对于同一个操作&#xff08;比如启动一个EC2实例&#xff09;&#xff0c;EventBridge中似乎会出现两种事件。一种来自CloudTrail&#xff0c;记录了API调用的行为&#xff1b;另一种则直接来…

【算法】动态规划 斐波那契类型: 740. 删除并获得点数

740. 删除并获得点数 中等 题目 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你…

AWS MySQL 读写分离配置指南

# AWS JDBC Wrapper读写分离配置实战&#xff1a;Spring Boot MyBatis Plus完整解决方案 ## 前言 在微服务架构中&#xff0c;数据库读写分离是提升系统性能的重要手段。本文将详细介绍如何在Spring Boot项目中使用AWS JDBC Wrapper实现自动读写分离&#xff0c;重点解决MyBat…

opencv检测运动物体

检测到的所有移动物体中轮廓中找到面积最大的轮廓&#xff0c;并绘制这个轮廓的矩形框。 #include <opencv2/opencv.hpp> #include <iostream>int main() {// 打开视频文件或摄像头cv::VideoCapture capture;capture.open("move3.mp4"); // 打开视频文件…

Camera相机人脸识别系列专题分析之十五:人脸特征检测FFD算法之libcvface_api.so算法API详细注释解析

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: Camera相机人脸识别系列专题分析之十五:人脸特征检测FFD算法之libcvface_api.so算法API详细注释解析 目录 一、libcvface_api.so算法API详细注释解析