1、使用yield  i

def my_generator(n):
for i in range(n):
temp = yield i
print(f'我是{temp}') g = my_generator(5) print(next(g)) # 输出0
print(next(g)) # 输出1
print(g.send(100)) # 既把100传进去了,又保留了原来迭代应该输出的2
print(next(g)) # 输出3
print(next(g)) # 输出4 '''
0 #第一次迭代
我是None #第二次迭代
1
我是100 #第三次迭代
2
我是None #第四次迭代
3
我是None #第五次迭代
4
'''

2、改为使用yield

def my_generator(n):
for i in range(n):
temp = yield
print(f'我是{temp}') g = my_generator(5) print(next(g))
print(next(g))
print(g.send(100))
print(next(g))
print(next(g)) '''
None
我是None
None
我是100
None
我是None
None
我是None
None
'''

总结:

yield语句的一般形式
  temp=yield expression (推荐:既可以返回迭代的值,也可以接受send传进去的参数并赋给temp)

  yield expression(也可以使用,只返回迭代的值)

  temp=yield (不推荐,)

  yield (不推荐,)

send(arg)方法总结:

  (1)它的主要作用是,当我需要手动更改生成器里面的某一个值并且使用它,则send发送进去一个数据,然后保存到yield语句的返回值
  (2)send(arg)的返回值就是那个本来应该被迭代出来的那个值。 这样既可以保证我能够传入新的值,原来的应该被迭代出来的值也不会弄丢

3、生成器抛异常

def my_generator():
try:
yield 'a'
yield 'b'
yield 'c'
yield 'd'
yield 'e'
except ValueError:
print('方法内--触发“ValueError"了')
except TypeError:
print('方法内--触发“TypeError"了') g = my_generator()
print(next(g))
print(next(g))
print('-------------------------')
print(g.throw(ValueError))
print('-------------------------')
print(next(g))
print(next(g))
print('-------------------------')
print(g.throw(TypeError))
print('-------------------------')
print(next(g))

4、加上while true

def my_generator():
while True:
try:
yield 'a'
yield 'b'
yield 'c'
yield 'd'
yield 'e'
except ValueError:
print('方法内--触发“ValueError"了')
except TypeError:
print('方法内--触发“TypeError"了') g = my_generator()
print(next(g))
print(next(g))
print('-------------------------')
print(g.throw(ValueError))
print('-------------------------')
print(next(g))
print(next(g))
print('-------------------------')
print(g.throw(TypeError))
print('-------------------------')
print(next(g))

总结:在生成器中抛出异常,这个throw函数会返回下一个要迭代的值或者是StopIteration

生成器的启动和关闭:
启动
第一:直接使用next(g),这会直接开始迭代第一个元素(推荐使用这个启动)
第二:使用g.send(None)进行启动,注意第一次启动的时候只能传入None,如果传入其他具体的指则会报错哦!
关闭
如果一个生成器被中途关闭之后,在此调用next()方法,则会显示错误StopIteration
在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration

-

yield总结的更多相关文章

  1. Python 生成器与迭代器 yield 案例分析

    前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...

  2. node 异步回调解决方法之yield

    先看如何使用 使用的npm包为genny,npm 安装genny,使用 node -harmony 文件(-harmony 为使用es6属性启动参数) 启动项目 var genny= require( ...

  3. yield生成器及字符串的格式化

    一.生成器 def ran(): print('Hello world') yield 'F1' print('Hey there!') yield 'F2' print('goodbye') yie ...

  4. Python中的生成器与yield

    对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...

  5. Python yield函数理解

    Python中的yield函数的作用就相当于一个挂起,是不被写入内存的,相当于一个挂起的状态,用的时候迭代,不用的时候就是一个挂起状态,挂起状态会以生成器的状态表现

  6. ecma6 yield

    function * generator(k){ console.log('begin'); var x = yield k; console.log('x:',x); var y = yield x ...

  7. Python yield与实现

    Python yield与实现  yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭 ...

  8. 可惜Java中没有yield return

    项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...

  9. 使用yield进行异步流程控制

    现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...

  10. GetEnumerator();yield

    GetEnumerator()方法的实质实现: 说明:只要一个集合点出GetEnumerator方法,就获得了迭代器属性,就可以用MoveNext和Current来实现foreach的效果,如上图. ...

随机推荐

  1. vite2.9 + vue3.2 打包部署到nginx上刷新页面404问题

    vite2.9 + vue3.2 打包部署到nginx上刷新页面404问题 在本地运行没问题,部署到服务器上,能正常访问,但是刷新之后页面404 原有的Nginx配置为: server { liste ...

  2. 大二下学期开学java测试

    我们在2月13日下午进行了java测试(是一个新闻类型的题),通过这一个测试我进行了以下总结: 我对于javaweb的框架构建和加密密码,还有一些不同人物功能的实现,使得我在这次得考试中成绩不太理想. ...

  3. ABAP 选择屏幕内的组件以及使用

    选择屏幕组件 主要记录了ABAP编程中选择屏幕常用的组件 选择框 范围选择框 radio单选 check选择 单行展现 配合radio和check使用较多 下拉框 自定义下拉框 按钮 文件框 文字帮助 ...

  4. Kubernetes 中审计策略--事件处理

    一.审计日志的策略 1.日志记录阶段 kube-apiserver 是负责接收及相应用户请求的一个组件,每一个请求都会有几个阶段,每个阶段都有对应的日志,当前支持的阶段有: RequestReceiv ...

  5. selenium浏览器参数设置详解——转

    所有参数 https://peter.sh/experiments/chromium-command-line-switches/ 参数使用介绍 https://blog.csdn.net/XianZ ...

  6. 【mysql练习】A,B两表结构完全一样,其中A中一些数据在B中不存在,用SQL将A表数据更新到B表中

    1,创建符合条件的A,B表和数据 create table IF not EXISTS A (id int auto_increment primary key);create table IF no ...

  7. cheerio中文文档

    这篇参考手册是对cheerio 官方文档的中文翻译 cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方 简介   让你在服务器端和htm ...

  8. MySQL(1): 基本操作

    MySQL 是流行的关系型数据库管理系统之一,特别是在WEB应用方面.推荐用5.6版本. My Sql客户端有很多 还有PHP MyAdmin, 是以web形式控制和操作MySQL数据库的管理工具.是 ...

  9. C语言||一作业04

    作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3 这个作业要求在哪 https://edu.cnblogs.com/campus ...

  10. Python-pytest -> Selenium之异常处理

    Selenium之异常处理: 引用的库:(可以查看库里提供的异常类) from selenium.common.exceptions import ElementNotVisibleException ...