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/(未看完)
随机推荐
- 【Python3 爬虫】17_爬取天气信息
需求说明 到网站http://lishi.tianqi.com/kunming/201802.html可以看到昆明2018年2月份的天气信息,然后将数据存储到数据库. 实现代码 #-*-coding: ...
- expect脚本免密码
#!/usr/bin/expect set timeout spawn ssh root@20.0.102.19 expect "password:" send "123 ...
- 一些JS常用的方法
/** * JS公用类库文件 */ (function(){ Tools = { W: window, D: document, Postfix: ".php", GetId: f ...
- CGGeometry Reference
CGRectUnionCGRectUnion接受两个CGRect结构体作为参数并且返回一个能够包含这两个矩形的最小矩形.听起来可能没什么,我相信你也可以用几行代码轻松实现这个功能,不过 CGGeome ...
- C#指南,重温基础,展望远方!(5)C#语句
程序操作使用语句进行表示. C# 支持几种不同的语句,其中许多语句是从嵌入语句的角度来定义的. 使用代码块,可以在允许编写一个语句的上下文中编写多个语句. 代码块是由一系列在分隔符 { 和 } 内编写 ...
- Mac /Ubuntu/Windows 下安装nodejs
Mac If you're using the excellent homebrew package manager, you can install node with one command: b ...
- Jekins部署.net站点
前提 1.你需要一台windows服务 可以装vs的且有重启电脑权限的(具体vs版本根据你的团队决定) 2.下载jekins 安装包 地址:https://jenkins.io/download/ ...
- IOS 拍照旋转修正
- (UIImage *)fixOrientation:(UIImage *)aImage { // No-op if the orientation is already correct if (a ...
- vim跳出括号的方法
https://github.com/Raimondi/delimitMate delimitMate是一个自动括号补全的好插件,但是,如果没有一个好的跳出括号办法,好想由打了折扣. 我目前找到最适合 ...
- 双向链表LinkedList使用
LinkedList是传统意义上的链表也就是双向链表.每个元素都是节点,都可以指向下一级 在前添加,在后添加: mSource.AddLast(...) mSource.AddFirst(...) 在 ...