学习笔记(37):Python实战编程-yield实现生成器

立即学习:https://edu.csdn.net/course/play/19711/255579?utm_source=blogtoedu

 1.yield = return + generator

yield是一个返回的是一个生成器对象,是通过next函数一次一次地进行函数地迭代来获取结果的,而return函数则是将结果返回后,不再与函数有关系了

# #单步生成
#
def gererator():#由于yield的存在,使得这个函数是一个生成器print('[gererator]yield执行前')yield 'iterm = 1'#执行到这行代码后,会将值返回,并且暂停在此,等待下一次next或者send函数的调用,再次从这里继续运行,注意最后一定需要将结果返回,否则会报错StopIteration,因为生成器本身就是一个迭代,停止了迭代就会报错print('[gererator]yield执行后')def main():res = gererator()#获取生成器对象print(res)#<generator object gererator at 0x0000018503A15930>print(next(res))#运行生成器函数,打印返回的数据if __name__ == '__main__':main()
'''
<generator object gererator at 0x0000016197635930>
[gererator]yield执行前
iterm = 1'''# #错误的示例
def gererator():#由于yield的存在,使得这个函数是一个生成器print('[gererator]yield执行前')yield 'iterm = 1'#执行到这行代码后,会将值返回,并且暂停在此,等待下一次next或者send函数的调用,再次从这里继续运行,注意最后一定需要将结果返回,否则会报错StopIteration,因为生成器本身就是一个迭代,停止了迭代就会报错print('[gererator]yield执行后')def main():res = gererator()#获取生成器对象print(res)#<generator object gererator at 0x0000018503A15930>print(next(res))#运行生成器函数,打印返回的数据print(next(res))#再次打印,会报错,因为上面一行代码已经将yield运行结束了,所以会使得这行再次运行时,没有返回,导致停止迭代,出错print('*****************')if __name__ == '__main__':main()'''从运行的结果可以看出,两次使用next函数,第一次运行函数,遇到yield停止,第二次继续在yield处开始运行,但是因为没有返回,所以代码停在了生成器中,即停止了迭代,进而在main函数中的 print('*****************')代码也没有执行就直接报错了<generator object gererator at 0x0000019059B95480>
Traceback (most recent call last):
[gererator]yield执行前File "C:/Users/jinlin/Desktop/python_further_study/基础回顾(生成器、迭代器等)/生成器(yield).py", line 39, in <module>
iterm = 1main()
[gererator]yield执行后File "C:/Users/jinlin/Desktop/python_further_study/基础回顾(生成器、迭代器等)/生成器(yield).py", line 35, in mainprint(next(res))#再次打印,会报错,因为上面一行代码已经将yield运行结束了,所以会使得这行再次运行时,没有返回,导致停止迭代,出错
StopIteration
'''# 错误的示例修正+send函数使用,send函数可以向生成器中发送数据,由yield接收
def gererator():#由于yield的存在,使得这个函数是一个生成器print('[gererator]yield执行前')res = yield 'iterm = 1'#执行到这行代码后,会将值返回,并且暂停在此,等待下一次next或者send函数的调用,再次从这里继续运行,注意最后一定需要将结果返回,否则会报错StopIteration,因为生成器本身就是一个迭代,停止了迭代就会报错print('[gererator]yield执行后')print('[generetor]%s'%res)yielddef main():res = gererator()#获取生成器对象print(res)#<generator object gererator at 0x0000018503A15930>print(next(res))#运行生成器函数,打印返回的数据res.send("【main】这是由send发送给生成器的数据")print('*****************')if __name__ == '__main__':main()'''
<generator object gererator at 0x0000021F62065480>
[gererator]yield执行前
iterm = 1
[gererator]yield执行后
[generetor]【main】这是由send发送给生成器的数据
*****************
'''import time
#指定迭代的最大次数,可以减少内存的占用
def gererator(maxnum):#由于yield的存在,使得这个函数是一个生成器for i in range(1,maxnum):print('************start*****************')yield ('迭代数据%s'%i)print('************end*****************\n\n')time.sleep(0.5)def main():for i in gererator(50):print(i)if __name__ == '__main__':main()
'''
************start*****************
迭代数据1
************end*****************************start*****************
迭代数据2
************end*****************************start*****************
迭代数据3
************end*****************************start*****************
迭代数据4
************end*****************************start*****************
迭代数据5
************end*****************************start*****************
迭代数据6
************end*****************************start*****************
迭代数据7
************end*****************************start*****************
迭代数据8
************end*****************************start*****************
迭代数据9
************end*****************************start*****************
迭代数据10
************end*****************
'''

 

2.yield from itermable:通过可迭代对象来构造生成器,可迭代对象一般有:列表、元组、生成器等

def iterator(n=101):#迭代器,生成一个列表,作为可迭代的对象a = []for i in range(1,n):a.append(i)return adef generator():#生成器,根据列表这个可迭代对象来创建生成器a_list = iterator()yield from a_listdef main():#从生成器中打印出数据for i in generator():print(i,end='、')if __name__ == '__main__':main()

 

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

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

相关文章

Mocha BSM产品亮点——关联事件分析

业务需求与挑战企业经常会遇到下列场景&#xff1a;• 企业某应用&#xff0c;例如&#xff0c;WebSphere Portal Server&#xff0c;已经不可用&#xff0c;是由于应用自身已不可用&#xff1f;还是应用所连接的数据库出了问题&#xff1f;还是应用的LDAP服务不可用&#xff1…

学习笔记(38):Python实战编程-窗体显示

立即学习:https://edu.csdn.net/course/play/19711/343100?utm_sourceblogtoedu GUI&#xff1a;图形用户接口——GUI组件&#xff0c;组件定义&#xff0c;组件布局管理 主体窗口的设置&#xff1a; import tkinter#导入创建窗体的相关模块class Mainwindow():#创建窗口类de…

Tomcat 配置和spring-framework MVC配置简介

Tomcat启动时&#xff0c;先找系统变量CATALINA_BASE&#xff0c;如果没有&#xff0c;则找CATALINA_HOME。然后找这个变量所指的目录下的conf文件夹&#xff0c;从中读取配置文件。最重要的配置文件&#xff1a;server.xml 。要配置tomcat&#xff0c;基本上了解server.xml&am…

ultra edit ftp帐号管理导入导出方法

在更换电脑或ultra edit新安装时往往需要将原来使用的ftp帐号导入过来&#xff0c;可以在高级-备份/恢复用户定制-选中其他保存备份&#xff0c;拷贝出来然后再导入。 也可以在配置-ftp/sftp中保存&#xff0c;拷贝出来然后在安装好后配置。 步骤1. 导出ftp帐号信息&#xff1a…

学习笔记(41):Python实战编程-按钮

立即学习:https://edu.csdn.net/course/play/19711/343103?utm_sourceblogtoedu 按钮——用于指令的提交作用&#xff0c;如将文本中输入的信息进行提交等 button tkinter.Button(root,text linlianqin,image photo,compound bottom) 创建了一个图片按钮&#xff0c;并且…

学习笔记(42):Python实战编程-pyinstaller程序打包

将程序打包可以使得所有Windows带有python虚拟机的电脑进行使用&#xff0c;打包的内容有代码加外部资源&#xff08;如logo图片等&#xff09; 步骤&#xff1a; 1&#xff09;创建程序的代码 2&#xff09;生成配置文件——用于获得打包的资源&#xff0c;将资源保存在运行程…

透视校正

1、需要解决的问题&#xff1a; 怎么用图像处理的办法将梯形转换为规则的矩形&#xff0c;进行一个视觉的透视校正 2、解决思路&#xff1a; 1&#xff09;先二值化图像&#xff0c;提取其轮廓&#xff08;其中使用到填充&#xff0c;形态学知识&#xff09; 2&#xff09;…

pyinstaller运行时出现TCLError的错误该怎么办?

1)修改代码后需要重新按照以上步骤进行&#xff0c;尤其不能忘记了修改配置文件的datas 2)必须得先pyi-makespec -F *.py指定要打包的程序&#xff0c;再修改配置文件&#xff0c;再pyinstaller -F *.spec程序打包 3&#xff09;确保配置文件已经修改成功&#xff0c;即将以下图…

视觉统计计数方案

1、二值化分割 2、形态学 3、距离变换 4、再进行二值化 4、连通区域计算 输入&#xff1a; 输出&#xff1a;printf&#xff08;"统计玉米粒的个数 contours:%d\n",contours);//contours 17

Filezilla 利用私钥无密码登录

Filezilla是常用的FTP客户端软件&#xff0c;这里介绍一个用私钥进行登录 主机:sftp://yourserver 用户名&#xff1a;yourname 点击“编辑”-“设置”菜单打开设置对话框&#xff0c;找到“连接”-“SFTP”设置项 添加密钥文件(A)”按钮,添加私钥文件&#xff0c;弹出对话框&a…

yo angualr-fullstatck 项目打包部署

yoeman使用grunt进行打包部署&#xff0c;直接运行grunt命令即可&#xff0c;期间会对代码进行检查&#xff0c;如果存在不规范的地方jshint会指定出来&#xff0e; grunt会对静态资源进行打包而且对资源文件名进行了MD5作为版本戳&#xff0e; &#xff11;&#xff1a;修改se…

学习笔记(43):Python实战编程-事件处理简介

立即学习:https://edu.csdn.net/course/play/19711/343105?utm_sourceblogtoedu 事件&#xff1a; 1.概念&#xff1a;就是给组件添加一定的功能&#xff0c;使得单击或者是聚焦时产生一定的反应 2.知识点&#xff1a; 1&#xff09;给组件绑定事件&#xff1a; 组件名.bind…

samba

安装配置samba&#xff1a; 准备工作&#xff1a; 173/udp(NetBIOS) 138/udp 139/tcp 445/tcp 这些端口已经启动。 然后确定selinux已经关闭&#xff08;#getenforce&#xff09;。 一般我们装好系统之后samba都会安装的&#xff1a;yum list all samba* 这里我选用的是samba3x…

1 week110的zookeeper的安装 + zookeeper提供少量数据的存储

下面是在weekend110上的zookeeper的安装 在此之前&#xff0c;先进行快照备份。 在这里&#xff0c;为了后续的zookeeper配置需要&#xff0c;在/home/hadoop/下&#xff0c;新建data目录&#xff0c;再新建zookeeper-3.4.6目录&#xff0c;再新建zkdata目录。 默认情况下&…

学习笔记(47):Python实战编程-pack布局

立即学习:https://edu.csdn.net/course/play/19711/343109?utm_sourceblogtoedu pack布局&#xff1a; 1&#xff09;最常用的布局&#xff0c;顺序排列布局方法 2&#xff09;完成了简单的组件位置码放&#xff0c;但如果内部布局处理机制跟不上的话&#xff0c;也可能会达…

ASP.NET Web API 应用教程(一) ——数据流使用

相信已经有很多文章来介绍ASP.Net Web API 技术&#xff0c;本系列文章主要介绍如何使用数据流&#xff0c;HTTPS&#xff0c;以及可扩展的Web API 方面的技术&#xff0c;系列文章主要有三篇内容。 主要内容如下&#xff1a; I 数据流 II 使用HTTPS III 可扩展的Web API 文档…

windows安装64位Pygame方法

因为官方网站http://www.pygame.org/download.shtml并没有提供64位的pygame&#xff0c;所以要找其他网站制作的64位安装文件。 如果你已经在你的64位开发环境中安装了32位的pygame&#xff0c; 那么在导入pygame包的时候&#xff0c; 会有提示&#xff1a; ImportError: DLL l…

学习笔记(48):Python实战编程-grid布局

立即学习:https://edu.csdn.net/course/play/19711/343110?utm_sourceblogtoedu grid布局&#xff1a;根据表结构进行的布局&#xff0c;索引为0行0列开始&#xff0c;最具代表性的即使电脑计算器的数字和符号按键布局 组件.grid(row 行索引号 &#xff0c; column 列索引号…

为什么“三次握手,四次挥手”?

前言&#xff1a; 如果你说你懂IT,你懂计算机网络&#xff0c;那么你会怎么解释“三次握手&#xff0c;四次挥手”&#xff1f; ---------------- 1.TCP报文段首部格式&#xff1a; 2.TCP建立连接图 -------------------------------------------- 符号说明 seq:"sequance…

学习笔记(49):Python实战编程-place布局

立即学习:https://edu.csdn.net/course/play/19711/343111?utm_sourceblogtoedu 1.place布局&#xff1a; 1&#xff09;最灵活的布局方式&#xff0c;是根据坐标点来进行组件的位置布局的 2&#xff09;确定坐标点后&#xff0c;组件从坐标点开始展开&#xff0c;即以指定…