Python_生成器generator
生成器:调用时返回一个迭代器
如果一个函数中包含yield语法,那这个函数就会变成一个生成器
例1:
def draw_money(draw): #这个函数称为生成器
while draw >0:
draw -=100
yield 100 #100 是返回的值
print('取钱!')
atm = draw_money(300)
print(type(atm))
print(atm.__next__())
print(atm.__next__())
print('干了一件其他的事') #代码执行中断也不影响下一次的继续执行
print(atm.__next__())
# print(atm.__next__()) #代码已经执行完了,添加这行会报错
draw_money
结果:
100
取钱!
100
干了一件其他的事
取钱!
100
result
例2:
import time def customer(name):
print('我( %s )来吃冰淇淋啦'% name)
while True:
ice_cream = yield
print('我是 ( %s ) ,我吃了冰淇淋( %s )' % (name, ice_cream)) def producer(name):
ice_1 = customer('Vera')
ice_2 = customer('Presly')
ice_1.__next__()
ice_2.__next__() print('我( %s )来做冰淇淋了!'% name)
for i in range(5):
time.sleep(2)
print('我把这个冰淇淋叫做冰淇淋( %s )!!!'% i)
ice_1.send(i)
ice_2.send(i)
producer('balala')
ice_cream
结果:
我( Vera )来吃冰淇淋啦
我( Presly )来吃冰淇淋啦
我( balala )来做冰淇淋了!
我把这个冰淇淋叫做冰淇淋( 0 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 0 )
我是 ( Presly ) ,我吃了冰淇淋( 0 )
我把这个冰淇淋叫做冰淇淋( 1 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 1 )
我是 ( Presly ) ,我吃了冰淇淋( 1 )
我把这个冰淇淋叫做冰淇淋( 2 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 2 )
我是 ( Presly ) ,我吃了冰淇淋( 2 )
我把这个冰淇淋叫做冰淇淋( 3 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 3 )
我是 ( Presly ) ,我吃了冰淇淋( 3 )
我把这个冰淇淋叫做冰淇淋( 4 )!!!
我是 ( Vera ) ,我吃了冰淇淋( 4 )
我是 ( Presly ) ,我吃了冰淇淋( 4 )
result
Python_生成器generator的更多相关文章
- Python复习之生成器 generator
生成器 generator def h(): print "hello" m = yield 5 print "m:", m d = yield 12 prin ...
- 生成器(generator)内部解析
#http://kb.cnblogs.com/page/87128/(未看完)
- 生成器generator
生成器generator 定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 代码: def cash_out(a ...
- ES6中的迭代器(Iterator)和生成器(Generator)
前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简 ...
- Hibernate中的主键生成器generator
本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...
- Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)
迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...
- 廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》
说明:这是我接触生成器概念后,自己对它的理解,可能比较表面,没深入理解,也可能有错误.后续校正错误认知,将有关generator作为一个tag了! 希望以后能活用. 先贴出自己写的triangles( ...
- 003_生成器(generator)内部解析
#http://kb.cnblogs.com/page/87128/(未看完)
- Python之生成器(generator)和迭代器(Iterator)
generator 生成器generator:一边循环一边计算的机制. 生成器是一个特殊的程序,可以被用于控制循环的迭代行为.python中的生成器是迭代器的一种,使用yield返回值函数,每次调用y ...
随机推荐
- Windows x64汇编函数调用约定
最近在写一些字符串函数的优化,用到x64汇编,我也是第一次接触,故跟大家分享一下. x86:又名 x32 ,表示 Intel x86 架构,即 Intel 的32位 80386 汇编指令集. x64: ...
- 玩转EhCache之最简单的缓存框架
二.主要特性 快速: 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘,因此无需担心容量问题: 缓存数据会在虚拟机重启的过程中写入磁盘: 可以通过 RMI.可插入 API 等方式进行分布式缓存: 具 ...
- windows下安装Rabbitmq详解
RabbitMQ是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang. 1.什么是Erlang? Erlang(['ə:læŋ])是一种通用的面向并发的编程语言 ...
- Confluence 6 数据库整合的方法 2:针对有大量附件的运行实例
设置准备 这个方法仅仅针对附件存储在文件系统中.如果你存储附件在数据库中,请参考 Attachment Storage Configuration 文档中的内容来找到如何在 2 种不同的文件存储方式之 ...
- python并发编程之IO模型,
了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...
- 【python】spark+kafka使用
网上用python写spark+kafka的资料好少啊 自己记录一点踩到的坑~ spark+kafka介绍的官方网址:http://spark.apache.org/docs/latest/strea ...
- 《剑指offer》从上往下打印二叉树
本题来自<剑指offer> 从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 队列的思想. 先将根节点加入,当取该节点时候,依次将左右子树加入,直 ...
- laravel 更新验证
public function update(Request $request, User $user) { // 验证规则. $rules = [ 'email' => [ 'nullable ...
- 基于Web的漏洞利用
1.Nikto 基于Web的漏洞信息扫描 nikto 自动扫描web服务器上没有打补丁的软件,同时同时也检测驻留在服务器上的危险文件,nikto能够识别出特定的问题,检测服务器的配置问题, 检测某台主 ...
- Niagara物联网框架机制二(笔记)
一.Niagara框架 1.一个Niagara 系统中有四种典型的Programs,这些程序间的关系及其网络通讯关系可通过下面的通讯图表解释 2. Niagara Programs station ...