python3----生成器generator(yield)
# 列表推导式
a = [i for i in range(100) if not(i % 2) and (i % 3)]
print(a)
# 字典推导式
b = {i: i % 2 == 0 for i in range(10)}
print(b)
# 集合推导式
c = {i for i in [1, 3, 2, 6, 5, 1, 2, 3, 6, 5, 9, 5]}
print(c)
# 生成器推导式
d = (i for i in range(10))
print(d) e = sum(i for i in range(100) if i % 2) 实例:
import random def get_data():
# 返回0到9之间的3个随机数
return random.sample(range(10), 3) def consume():
# 显示每次传入的整数列表的动态平增增均值
running_sum = 0
data_items_seen = 0 while True:
data = yield
data_items_seen += len(data)
running_sum += sum(data)
print('The running average is {}'.format(running_sum / float(data_items_seen))) def produce(consumer):
# 产生序列集合,传递给消费函数(consumer)
while True:
data = get_data()
print('Produced {}'.format(data))
consumer.send(data)
yield if __name__ == '__main__':
consumer = consume()
consumer.send(None)
producer = produce(consumer) for _ in range(10):
print('Producing...')
next(producer)
- generator是用来产生一系列值的
- yield则像是generator函数的返回结果
- yield唯一所做的另一件事就是保存一个generator函数的状态
- generator就是一个特殊类型的迭代器(iterator)
- 和迭代器相似,我们可以通过使用next()来从generator中获取下一个值
- 通过隐式地调用next()来忽略一些值
# 生成器的创建方式
# 1,列表生成式
# 2,函数
#
#
# yield vs return
# return 返回并中止函数
# yield 返回数据, if 关冻结当前执行过程..:
# next唤醒冻结的函数执行过程,继续执行,直到遇到下一个yield
#
# 函数有了yield之后
# 1.函数名加()就得到了一个生成器
# 2.return 在生成器里,代表生成器的中止,直接报错
#
# next
#
# 唤醒生成器的继续执行
#
# send("stop")
# 1.唤醒并继续执行
# 2.发送一个信息到生成器内部
python3----生成器generator(yield)的更多相关文章
- 生成器(generator,yield),next,send
#生成器 def generator(): for i in range(200): yield '哇哈哈%s' %i g = generator() #调用生成数函数,接受作用 ret = g.__ ...
- 第十三天python3 生成器yield
生成器generator 生成器指的是生成器对象,可由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象: 生成器函数 函数体中包含yield语句的函数,返 ...
- Python生成器与yield
列表推导与生成器表达式 当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] >>> f ...
- Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)
迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...
- python迭代器与生成器及yield
一.迭代器(itertor) 1.可迭代: 在Python中如果一个对象有__iter__()方法或__getitem__()方法,则称这个对象是可迭代的(iterable). 其中__iter__( ...
- 廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》
说明:这是我接触生成器概念后,自己对它的理解,可能比较表面,没深入理解,也可能有错误.后续校正错误认知,将有关generator作为一个tag了! 希望以后能活用. 先贴出自己写的triangles( ...
- Python: generator, yield, yield from 详解
1.Generator Expressions 生成器表达式是用小括号表示的简单生成器标记法: generator_expression ::= "(" expression co ...
- 列表生成式 生成器 迭代器 yield
列表生成式 格式:通过一个或者若干个在List里边的for构建List而非List外部的for循环 举个例子:计算从1到10整数的平方构成一个List L=[ x*x for x in range(1 ...
- Python复习之生成器 generator
生成器 generator def h(): print "hello" m = yield 5 print "m:", m d = yield 12 prin ...
- 生成器(generator)内部解析
#http://kb.cnblogs.com/page/87128/(未看完)
随机推荐
- <c:forEach items="${revertList}" varStatus="reverts" var="revert" > <dl >
<c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 begin 开始条件 否 0 end 结束条件 否 集合中的 ...
- javascript-使用el表达式获取后台传递的数据
js获取后台数据 CreateTime--2017年5月26日16:14:14Author:Marydon 在js中使用el表达式的前提是:HTML引用js使用内联方式(即在JSP页面内部使用js ...
- 【Python】学习笔记四:数学运算
python中的加减乘除比其他的语言简单,不需要对其赋值变量 加减乘除 ) #加法 ) #减法 ) #乘法 ) #除法 5.0 ) #乘方 判断 判断返回的是True或者False ) #等于 Tru ...
- js取消radio选中 反选
var radio=document.createElement("input");radio.type="radio";radio.onclick = fun ...
- JDBC数据库编程:ResultSet接口
掌握ResultSet接口 使用ResultSet接口进行查询 ResultSet接口 在JDBC操作中,数据库所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 常用方 ...
- struts 简单前台用户名校验
一个jsp <?xml version="1.0" encoding="GB18030" ?> <%@ page language=" ...
- 对正在运行的mysql进行监控
对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql &g ...
- shell脚本中执行mysql 语句,去除warning using a password on the command line interface can be insecure信息
方法二:使用mysql参数的方法 mysql -u$user -p$pass -D $db -e "select host from user;"当然,可以通过将传参的方式来传递 ...
- 解决 TextMate 2 无法安装 Emmet 插件
本篇文章由:http://xinpure.com/solving-textmate-2-cannot-install-emmet-plugin/ 前端神器 Emmet 插件原名为 ZedCoding ...
- 关闭MongoDB
以下方法干净地关闭MongoDB: 完成所有挂起的操作.刷新数据到数据文件.关闭所有的数据文件 1. > use admin switched to db admin > db.shutd ...