python生成器函数(generator),python3学习笔记:生成器generator

简单了解下生成器generator,主要是yield的返回值和send的传参,记录下。

生成器的基本属性

generator = 函数 + yield

简单说,就是一个函数,里面用到了关键字yield,就成为了一个生成器

生成器和函数的不同主要在于:

直接调用生成器,不会执行;

举个栗子:a = f() #这里f()是个生成器

运行上面这句,f()不会执行,首次执行需要使用next(a)或a.send(None),后面会细讲

每次执行,会暂时中断在yield关键字处,而且通过yield可以返回一个参数

下次再接着执行,会从上次中断的yield处接着执行,并可以通过send()传递参数,当然继续中断在下一个yield处

如果通过send()或next()执行generator,而没有找到下一个yield,会报错

yield返回值&&传参

总结就是:

return = send(msg)

传递参数msg给当前中断yield前面的变量

同时返回下一个yield后面的参数给return

return = next(a)

没有传递参数或者说传递参数None给当前中断yield前面的变量

同时返回下一个yield后面的参数给return

直接看下面的栗子,直观明了

#生成器

def f():

print('start')

a = yield 1 #可以返回参数1,并接收传递的参数给a

print(a)

print('middle')

b = yield 2 #可以返回参数2,并接收传递的参数给b

print(b)

print('next')

c = yield 3 #可以返回参数3,并接收传递的参数给c

print(c) #这里貌似永远不会执行,因为总会在上一行的yield处结束

a = f() #这里不会执行,即没有任何打印信息

#a.next() #这种写法在python3里面会报错

return1 = next(a)#输出start,中断在yield 1处,返回yield后面的1给return1

#return1 = a.send(None) #效果同上一条语句

#return1 = a.send('test') #这里会报错

#如果首次执行generator,就传递一个非None的参数,因为第一次执行不是从一般的中断yield处执行起,所以没有yield关键字来接收传参,就会报错

print(return1)

return2 = next(a)#传入参数为None,即a=None,返回2给return2

print(return2)

return3 = a.send('msg')#传入参数msg,即b=msg,返回3给return3

print(return3)

执行结果如下:

start

1

None

middle

2

msg

next

3

[Finished in 0.7s]

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

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

相关文章

复旦微电子fpga数据手册_专注FPGA图像加速领域 深维科技跨入发展快车道

日前,在2019赛灵思开发者大会(美洲站)上,深维科技正式面向全球发布ThunderImage三款重磅图像加速产品:全球最快的JPEG2JPEG缩略图方案、超高性能的JPEG2WebP转码方案及世界级超高密度算力的JPEG2JPEG缩略图方案。新产品一经发布立即“技惊”四…

oracle Blob保存方式,关于文件保存到Oracle中BLOB字段的方法及例子

关于文件保存到Oracle中BLOB字段的方法及例子-------------------------------------------public class FileOpClass{public static byte[] GetFileStream(string filepath){byte[] byteArray null;FileStream fs null;try{fs new FileStream(filepath, FileMode.Open);lon…

python 调c++生成的dll 中识别char *_基于tensorflow 实现端到端的OCR:二代身份证号识别...

最近在研究OCR识别相关的东西,最终目标是能识别身份证上的所有中文汉字数字,不过本文先设定一个小目标,先识别定长为18的身份证号,当然本文的思路也是可以复用来识别定长的验证码识别的。 本文实现思路主要来源于Xlvector的博客&a…

php友价商城手游,2019年T5友价商城网站程序-伪静态规则

# Version 3.1.0.73RewriteEngine on#RewriteBase /RewriteRule vip(.*) /shop/view.php?str$1RewriteRule ^(.*)/search(.*).html /$1/index.php?str$2RewriteRule ^(.*)/goods([0-9]*).html /$1/goods.php?id$2RewriteRule ^(.*)/(.*)list(.*).html /$1/$2list.php?str$3…

oracle 的跨天查询,考勤跨天如何统计 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...

本帖最后由 yaksha1 于 2020-9-11 17:29 编辑请问下,目前正在统计每个人每天考勤数据是否正常,上班打一次卡,下班打一次卡,算是正常。打卡情况大致分两种,一种是正常白班,朝九晚五,一种是跨天&a…

php程序员学什么语言好就业_2019年初中毕业生学什么专业好?学什么专业好就业?...

前言:据了解,目前我国职业人才缺口较大,市场供需不平衡。许多学生往往还没毕业,就已经与企业签订了就业协议。因此,有许多家长愿意把小孩子送到专业学校进行就读。毕竟可以学的一门好专业,对学生将来的路是…

中print中加f_Python3中的格式化输出

Python3字符串格式化输出有两种形式实现:a:字符串格式化表达式: ...%... % (values)b:字符串格式化方法调用:...{}....format(values) 或者 f...{xx}...1:字符串格式化的类型码(typecode)(表1)2: 字符串格式化表达式格…

Json-ServerMockJs简单快速生成测试数据

Json-Server&MockJs简单快速生成测试数据 1、Json-Server 和 MockJs的安装 npm install -g json-server //全局安装2、创建目录和初始话 例如:创建D:\ProjectOne文件夹 3、打开终端或者powershell进入ProjectOne文件夹 4、初始化项目 npm init5、安装Mock…

oracle索引sys_nc,通过dba_ind_columns表查到索引所在列的名字为SYS_NC00133$

使用下面的脚本查看表上索引相关信息:selectind.uniqueness uniq,ind.owner||.||col.index_name indname,col.column_name colnamefromdba_ind_columns col,dba_indexes indwhereind.owner upper(&ixowner)andind.table_name upper(&tabname)andcol.index…

oracle nvl和coalesce,NVL与Coalesce之间的Oracle差异

慕码人8056858COALESCE是更现代的功能,是ANSI-92标准的一部分。NVL在Oracle具体的,它在推出80的前存在任何标准。在两个值的情况下,它们是同义词。但是,它们的实现方式不同。NVL总是计算两个参数,同时COALESCE通常在找…

安卓签名生成工具_ios app如何进行内测?ios app和安卓app的内测有何区别?

目前手机主流的操作系统分为Android和iOS两大阵营,分别是由谷歌和苹果进行开发维护。这两大平台的应用都相互独立,无论是运行机制还是底层原理,都不一样,所以即使是同一款App也是需要针对在两大平台上分别进行内测和运营、发布。那…

cx oracle dpi 1002,cx_Oracle连接数据库总结

python中连接oracle数据库使用第三方库文件cx_Oracle时遇到了各种问题,网上查找资料调试了几天才弄好,下面是不断调试后总结的一些经验。1.oracle客户端(Oracle Instant Client)版本需要和操作系统版本位数相同,同时cx_Oracle官方文档(http:/…

虚拟机python建站_搭建本地虚拟服务器linux(CentOS 7)的python虚拟环境(Hyper-V演示)...

新建虚拟机->安装CentOS7->新建虚拟交换机:内部网络->CentOS7设置->网络适配器:虚拟交换机:新建虚拟交换机->进入CentOS#cd /etc/sysconfig/network-scripts/#ls -a#vi ifcfg-eth0 #(有些系统不是eth0,前面ifcfg-的…

matlab 输入日期,matlab输入年月日算一年中的第几天.doc

matlab输入年月日算一年中的第几天clc,clear all,close alldisp This program calculates the day of year given the ;disp current date. ;month input Enter current month 1-12 : ;day input Enter current day 1-31 : ;year input Enter current year yyyy : ;%Check for …

深拷贝的缺点_拷贝?还傻傻分不清深浅?

「引言」❝臣闻求木之长者,必固其根本;欲流之远者,必浚其泉源。---- 魏征 《谏太宗十思疏》❞或许你会问到,网上已经把深浅拷贝(算一个面试的高频考点了吧)的文章都快写烂了,为什么自己还要重新操刀写一遍呢&#xff0…

php 失去 焦点 另一个表单猎取值,同一表单如何根据某一个文本框的值 改变另一个文本框的值...

我用的是失去焦点,然后后台查询到了数据,返回回来显示不了!!$(document).ready(function(){$("#card").blur(function(){var card$("#card").val();if(card!""){$.get("{:U(guoye/yanzheng)}&…

实现文件中名词的统计计数_通过勤哲EXCEL和Excel中的rank函数实现排名统计

如今,信息化已成为各行业企业转型和发展的关键所在,信息化技术最明显的特点是企业不同部门的人在信息技术的支撑下,可以利用丰富的资源与工具展开协作学习,在相对自由的模式和环境下,改变传统设计相对局限、固定思维的…

php 选择 出现列表,php – 如何从加权列表中选择4个唯一项?

所以我有一个加权项目列表,我想从这个列表中选择4个非重复项目.Item WeightApple 5Banana 7Cherry 12...Orange 8Pineapple 50最有效的方法是什么?我最初的尝试是,如果一个已经被选中的项目出现的话,只需重新选择随后的选秀权……但是对于一个小名单,这可能会导致大…

安徽关节式焊接机器人_上下料机器人的重要性体现在哪里?它有哪些优势?

上下料机器人是工业机器人家族中从事加工应用的重要成员之一,能满足“快速、大批量加工节拍”、“节省人力成本”、“提高生产效率”等要求,成为越来越多中心企业的理想选择。那么,上下料机器人有哪些特征和优势?企业主应该如何选…

oracle查询ora03114,求教:ora-03114错误从哪里排查?

ERP软件偶尔会报 ora-03114错误 未连接到oracle我检查数据库的根超时有关的设置dba_profiles中的如下两个参数,都是不限制connect_timeunlimitedidle_timeunlimitedsqlnet.net中,只设置了如下参数SQLNET.EXPIRE_TIME5 --这个用来清除僵死连接的监听日志文…