python3学习笔记:生成器generator
来源:互联网 发布:儿童桌面软件 编辑:程序博客网 时间:2024/05/16 17:24
跟着廖大学python3一段日子了,这里简单了解下生成器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给return2print(return2)return3 = a.send('msg')#传入参数msg,即b=msg,返回3给return3print(return3)
执行结果如下:
start1Nonemiddle2msgnext3[Finished in 0.7s]
0 0
- python3学习笔记:生成器generator
- Python学习笔记 - 生成器generator
- python学习笔记--generator生成器
- Python3学习笔记-迭代器&生成器
- 我的python3基础笔记之 【生成器 generator】 05
- Python3学习(10)--列表生成器(List generator)
- 08-python学习笔记-生成器:generator
- Python3学习笔记:迭代器与生成器
- Java笔记---生成器Generator
- Python学习笔记(10)-生成器generator和迭代器Iterator
- python3.x中的生成器generator调用next方法
- python3.x中的生成器generator调用next方法
- 生成器 generator
- 生成器generator
- 生成器generator
- 生成器generator
- MyBatis学习之代码生成器Generator
- ES6学习笔记:Generator
- 矢量动画的介绍和使用
- export关键字的用法
- 【bzoj 2751】 [HAOI2012]容易题(easy)
- Eclipse调试进阶-结合Dubbo调试实例分析
- numpy模块笔记之meshgrid
- python3学习笔记:生成器generator
- 教你彻底学会动态规划——进阶篇
- 使用sqlite3 模块操作sqlite3数据库
- HTTPS
- 面试题之进程间通信问题
- Leetcode Week6
- 百度面试题——01排序
- leetcode解题报告7. Reverse Integer
- 分析实时嵌入式系统软件调试问题