生成器:调用时返回一个迭代器

如果一个函数中包含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的更多相关文章

  1. Python复习之生成器 generator

    生成器 generator def h(): print "hello" m = yield 5 print "m:", m d = yield 12 prin ...

  2. 生成器(generator)内部解析

    #http://kb.cnblogs.com/page/87128/(未看完)

  3. 生成器generator

    生成器generator 定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 代码: def cash_out(a ...

  4. ES6中的迭代器(Iterator)和生成器(Generator)

    前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简 ...

  5. Hibernate中的主键生成器generator

    本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. [xhtml] view plaincopy <c ...

  6. Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)

    迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...

  7. 廖雪峰老师博客学习《通过生成器generator生成列表式杨辉三角》

    说明:这是我接触生成器概念后,自己对它的理解,可能比较表面,没深入理解,也可能有错误.后续校正错误认知,将有关generator作为一个tag了! 希望以后能活用. 先贴出自己写的triangles( ...

  8. 003_生成器(generator)内部解析

    #http://kb.cnblogs.com/page/87128/(未看完)

  9. Python之生成器(generator)和迭代器(Iterator)

    generator 生成器generator:一边循环一边计算的机制. 生成器是一个特殊的程序,可以被用于控制循环的迭代行为.python中的生成器是迭代器的一种,使用yield返回值函数,每次调用y ...

随机推荐

  1. 转-CSRF——攻击与防御

    0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/PO ...

  2. GNU Wget 1.19.1 static built on mingw32

    http://pan.baidu.com/s/1sluFAVj #wget --version GNU Wget 1.19.1 built on mingw32. -cares +digest -gp ...

  3. inux下配置rsyncd服务

    创建配置文件 touch /etc/rsyncd/rsyncd.conf #主配置文件 touch /etc/rsyncd/rsyncd.secrets #用户名密码文件,一组用户一行,用户名和密码使 ...

  4. 判断鼠标进入容器的方向小Demo

    参考资料: 贤心博客:http://sentsin.com/web/112.html, Math.atan2(y,x) 解释 :http://www.w3school.com.cn/jsref/jsr ...

  5. MicroPython的开发板

    比如: pyboard micro:bit ESP8266/ESP32 stm32等等 什么是pyboard? pyboard是官方的MicroPython微控制器板,完全支持软件功能.硬件有: ST ...

  6. 生产环境优雅的重启基于Nginx、Tornado的Web服务进程

    Nginx是一个高效的Web服务器及代理服务器,Tornado是一个基于epoll的异步Web开发框架,通常使用Nginx做为Web服务器时,都会以FastCGI模式,而我们从开发.调试.运维的角度考 ...

  7. js——数组操作

    把教程里的api看了一遍,感觉记住了,又感觉没有记住...后来发现,如果给自己提需求,或许不错.想想对于一个数组,可能会用到哪些操作呢?基本的操作就是增删改查吧(有点像sql) 1. 创建数组     ...

  8. Linux Oracle bash: “sqlplus / as sysdba”: command not found 解决方法

    bash: sqlplus: command not found 解决方法 注:本文来源于 <   bash: sqlplus: command not found 解决方法   > 1: ...

  9. SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案

    那是因为你在使用自己写的分类时没有指定返回的数据类型  指定下返回数据类型就好了 我是用的oc写的分类在Swift中使用的 错误代码 private lazy var btn = UIButton.C ...

  10. mongo 的导入和导出

    1.导出工具:mongoexport     1.概念:         mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指 ...