yield总结
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总结的更多相关文章
- Python 生成器与迭代器 yield 案例分析
前几天刚开始看 Python ,后因为项目突然到来,导致Python的学习搁置了几天.然后今天看回Python 发现 Yield 这个忽然想不起是干嘛用的了(所以,好记性不如烂笔头.).然后只能 花点 ...
- node 异步回调解决方法之yield
先看如何使用 使用的npm包为genny,npm 安装genny,使用 node -harmony 文件(-harmony 为使用es6属性启动参数) 启动项目 var genny= require( ...
- yield生成器及字符串的格式化
一.生成器 def ran(): print('Hello world') yield 'F1' print('Hey there!') yield 'F2' print('goodbye') yie ...
- Python中的生成器与yield
对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...
- Python yield函数理解
Python中的yield函数的作用就相当于一个挂起,是不被写入内存的,相当于一个挂起的状态,用的时候迭代,不用的时候就是一个挂起状态,挂起状态会以生成器的状态表现
- ecma6 yield
function * generator(k){ console.log('begin'); var x = yield k; console.log('x:',x); var y = yield x ...
- Python yield与实现
Python yield与实现 yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭 ...
- 可惜Java中没有yield return
项目中一个消息推送需求,推送的用户数几百万,用户清单很简单就是一个txt文件,是由hadoop计算出来的.格式大概如下: uid caller 123456 12345678901 789101 12 ...
- 使用yield进行异步流程控制
现状 目前我们对异步回调的解决方案有这么几种:回调,deferred/promise和事件触发.回调的方式自不必说,需要硬编码调用,而且有可能会出现复杂的嵌套关系,造成"回调黑洞" ...
- GetEnumerator();yield
GetEnumerator()方法的实质实现: 说明:只要一个集合点出GetEnumerator方法,就获得了迭代器属性,就可以用MoveNext和Current来实现foreach的效果,如上图. ...
随机推荐
- NPOI 导出 EXCEL
1. 2.创建NPOIHelper using System;using System.Collections.Generic;using System.Data;using System.IO;us ...
- 6.配置git-码云仓库
使用git需要使用码云或者github,github存在访问慢的情况,所以我使用码云(gitee). git客户端 下载安装 到git官网 https://git-scm.com/ 下载git客户端 ...
- Day 11 11.2 文件操作
文件操作 引言 到目前为止,我们做的一切操作,都是在内存里进行的,这样会有什么问题吗?如果一旦断电或发生意外关机了,那么你辛勤的工作成果将瞬间消失.是不是感觉事还挺大的呢?现在你是否感觉你的编程技巧还 ...
- linux篇之WC(word count)的使用概述
Text. Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项] [文件1] [文件2] ... 2.命 ...
- Windows本地文件上传到Linux服务器(腾讯云)
环境 本地 操作系统:Window 10 企业版LTSC;内存:8GB;操作类型:64位. 服务器 CentOS 8(1核2GB,1Mbps) 64位 ,已安装Docker(CentOS 8 的doc ...
- 【Nday】Spring-Cloud-SpEL-表达式注入漏洞复现
# 环境搭建 JDK 15下载: https://www.oracle.com/java/technologies/javase/jdk15-archive-downloads.html 在Cen ...
- linux配置定时备份mysql数据库
1.创建备份目录 # mkdir /mydata/bak2.创建备份脚本 # vi /usr/sbin/bakmysql.sh #!/bin/bash #Name:bakmysql.sh #This ...
- K Smallest In Unsorted Array
Find the K smallest numbers in an unsorted integer array A. The returned numbers should be in ascend ...
- elasticsearch 根据主键_id更新部分字段
package com.better517na.ebookingbusiservice.helper;import com.alibaba.fastjson.JSON;import com.aliba ...
- 211808543 钟志凌 https://home.cnblogs.com/u/211808543zhongzhiling/ https://github.com/wayne9
211808543 钟志凌 https://home.cnblogs.com/u/211808543zhongzhiling/ https://github.com/wayne9