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

如果一个函数中包含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. Qt5.10.1 在windows下vs2017静态编译

    1.在计算机上安装python库和perl库(因为后续的静态编译需要用到这两种语言),可以在命令行敲击“python”和“perl -v”检查是否安装成功. 2.修改msvc-desktop.conf ...

  2. 运维与自动化系列③自动化部署基础与shell脚本实现

    自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器纯手工登录git服务器执行git pull或svn服务器执行svn upda ...

  3. 【算法】二分查找法&大O表示法

    二分查找 基本概念 二分查找是一种算法,其输入是一个有序的元素列表.如果要查找的元素包含在列表中,二分查找返回其位置:否则返回null. 使用二分查找时,每次都排除一半的数字 对于包含n个元素的列表, ...

  4. Less常用知识点

    上篇文章介绍了如何安装Less,我们将所有东西都写在.less里面,最后通过命令将.less转换成.css文件,就可以放入到项目里用了.今天了解一些less常用知识点. 1.变量:声明两个变量,一个是 ...

  5. Golang的单引号、双引号与反引号

    Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...

  6. 牛客网 python 求解立方根

    •计算一个数字的立方根,不使用库函数 详细描述: •接口说明 原型: public static double getCubeRoot(double input) 输入:double 待求解参数 返回 ...

  7. C# Excel行高、列宽、合并单元格、单元格边框线、冻结

    private _Workbook _workBook = null;private Worksheet _workSheet = null;private Excel.Application _ex ...

  8. Where is NuGet in VS2017 Community?

    问题:在VS2017中找不到NuGet 回答:https://stackoverflow.com/questions/43702484/where-is-nuget-in-vs2017-communi ...

  9. JS和Jquery获取和修改label的值的示例代码

    abel标签在JS和Jquery中使用不能像其他标签一样用value获取它的值,下面有个不错的示例,希望大家可以学习下 来源:  <  JS和Jquery获取和修改label的值的示例代码  & ...

  10. Confluence 6 整合到支持的附件存储选项

    如果你现在正在存储附件到 WebDav 或者你的数据库中.你可以整合附件的存储到文件系统中.当你的附件从数据库中被合并到文件系统后,你存储在数据库中的附件数据就可以从数据库中删除了. 当附件合并进行的 ...