Python3之生成器
来源:互联网 发布:华盛顿大学网络课程 编辑:程序博客网 时间:2024/06/06 19:38
生成器本质:迭代器
自带yeild 关键字,调用此函数得到一个生成器
多次调用函数就得到多个生成器
send、yeild、while True循环要配套使用
使用send前要初始化将程序停到yeild位置将程序挂起,然后send()可以执行,直到遇到下一个yeild程序挂起并将下一个yeild后面的值返回(精华,理解了这句话就真正理解了send的用法)yeild返回值的时候不管yeild在什么位置都可以将其后面的值返回,可能要返回的值代码在yeild的后面,而return必须位于函数体尾部就是说在返回值代码的后面,结束该函数
- 协程函数:包含yeild和send关键字
表达式形式的yield:调用foo()得到一个生成器,此时函数内的代码不会执行,当调用next()时,函数被触发执行,碰到yield程序挂起,然后调用g.send(数值),程序从挂起时开始执行,此时数值先给了yield,然后yield赋值给x,程序继续执行,直到碰到yield程序挂起,并将yield后的结果返回给函数。如果此时再次调用next(g)那么yield的值就是None然后赋值给x,程序继续执行,这个效果和g.send(None)一样。So,send的作用有两个:
1.将值传递给yield,然后yield赋值给x。
2.触发函数的执行,直到遇到yield停止,yield后的值返回给函数,此步的操作和next()一样。
注意:要使用send()传值,必须要先将程序挂起,也就是初始化,这样才能完成传值,否则会报如下错误:
PS:
当调用foo()时,函数不会执行,但是得到一个生成器g,生成器调用next()方法时会触发函数foo()执行,当函数执行碰到yield时,程序挂起并将yield后的返回值返回,然后再次调用next()时,程序会从yield挂起时继续执行,直到碰到下一个yield,当没有下一个yield,也就是没有返回值时会报StopIteration异常,这就是函数运行的完整流程。next()要有返回值才行,没有就会抛异常。也就是next()必须要得到一个返回值,这个值也必须由yield返回,没有yield必然没有返回值。
- Python3之生成器
- Python3之生成器
- Python3之生成器函数及表达式
- python3 生成器
- 我的Python3.0笔记之容器,迭代器,生成器
- 我的python3基础笔记之 【生成器 generator】 05
- Python3 迭代器与生成器
- Python3 迭代器与生成器
- Python3 迭代器与生成器
- python3迭代器生成器
- python3-迭代器与生成器
- Python3的生成器
- Python3 迭代器与生成器
- Python3 迭代器与生成器
- python3 迭代器与生成器
- Python3.4.3中yield 生成器
- python3的迭代器和生成器
- Python3学习笔记-迭代器&生成器
- 移动web开发基础知识
- 安全框架Shiro和Spring Security比较
- 日期计算
- 挖掘算法中的数据结构(一):O(n^2)排序算法之 选择、插入、冒泡、希尔排序 及 优化
- 通用VU函数
- Python3之生成器
- 【模板】线段树
- android7.0 SystemUI编译过程中遇到的问题
- noip模拟赛 小球游戏 cqbzoj3391(网格路径模型)
- 小巧函数
- HTML中常用操作关于:页面跳转,空格
- (1)从零开始学Spring Boot
- 【CodeForces
- 快速解读GC日志