博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之路【第二十八篇】:生成器与迭代器
阅读量:7242 次
发布时间:2019-06-29

本文共 1915 字,大约阅读时间需要 6 分钟。

#!/usr/bin/env python# -*- coding:utf-8 -*-#只要函数的代码里面出现了yield关键字,这个函数就不再是一个普通的函数了,叫做生成器函数#执行生成器函数,获取到的东西就叫做生成器#生成器的一个好处就是无需在内存中创键所有东西,什么时候需要什么时候创建'''def fun():    yield 1    yield 2r = fun()'''#fun是生成器函数,r是生成器,生成器具有生成一些东西的能力###################生成器原理#######################'''#定义一个生成器函数def fun():    print(11)    yield 1    print(22)    yield 2    print(33)    yield 3#执行生成器函数,仅仅获取了一个生成器,不会输出任何值r = fun()#执行生成器的__next__方法,碰到yield就退出,这里的yield相当于普通函数里面的return,但是不一样,yield可以保存上一次的执行状态,而return 是直接退出的返回值是第一个yield的值ret = r.__next__()print(ret)#再次执行生成器的__next__方法,返回值是第二个yield的值ret = r.__next__()print(ret)'''####################################################################################生成器实现#######################def xrange(n):    start = 0    while True:        if start > n:            return        yield start        start += 1obj = xrange(5)n1 = obj.__next__()n2 = obj.__next__()n3 = obj.__next__()n4 = obj.__next__()n5 = obj.__next__()print(n1,n2,n3,n4,n5)
#!/usr/bin/env python# -*- coding:utf-8 -*-#生成器仅仅具有一种生成能力#如和将一个函数变为生成器,在函数里面出现了yield,这个函数就不再是普通的函数了,叫生成器函数,执行这个生成器函数就会得到一个生成器#迭代器具有访问能力,迭代器是一个一个进行迭代,只能一个一个往后找,不能往前找#迭代器特点:#访问者不需要关心迭代器内部的结构,仅需要通过next()方法不断去取下一个内容#不能随机的访问集合中的某个值,只能从头到尾依次访问#访问到一半时,不能往后退#便于循环比较大的数据集合,节省内存#迭代器本质上也是通过next一个一个去取,我们在用的时候直接用for循环迭代就可以了#生成器需要自己写,而迭代器直接用for循环就可以了def xrange(n):    start = 0    while True:        if start > n:            return        yield start        start += 1for x in xrange(10):    print(x)

生成器与迭代器综合练习:

#! usr/bin/env python# -*-coding = utf-8 -*-#生成器def range(n):    start = 0    while True:        if start < n:            yield start            start += 1        else:            return#迭代器for i in range(10):    print(i)  

  对于生成器的理解要注意,在例程中,我们使用的是一些整数,既然是生成器,那么可不可以生成别的东西,比如类似于列表或者字典这样的数据结构,可以,如:

li = [1,2,3,4,5]for item i li:    yield{        'index':item    }

 比如上面类似的写法,也是个生成器,不过生成器中的数据结构是字典形式的 

  

 

转载于:https://www.cnblogs.com/ronghe/p/9259014.html

你可能感兴趣的文章
docker的数据卷管理
查看>>
我的友情链接
查看>>
libgdx游戏引擎开发笔记(三)Libgdx的游戏组件部分
查看>>
服务器监控-nagios配置篇
查看>>
matlab-基础 fprintf 输出整数
查看>>
RDIFramework.NETV2.9版本 Web新增至14套皮肤风格+三套界面组合(共42套皮肤组合)...
查看>>
陕西省网络通信安全管理员培训 游侠安全网站长授课
查看>>
PL/SQL--基础篇2循环控制
查看>>
智能合约编程语言-solidity快速入门(上)
查看>>
iptables与layer7协议的分析与应用
查看>>
多路由器实现无线无缝漫游
查看>>
河南电视台成功上线TurboMail邮件系统
查看>>
我的2013
查看>>
c++开源代码相关网站
查看>>
UISearchController
查看>>
直接数据访问方法
查看>>
AD数据库备份[为企业部署Windows Server 2008系列十五]
查看>>
[置顶] Hibernate4实战 之 第四部分:关系映射
查看>>
mysql主从常用命令
查看>>
docker中磁盘逻辑卷被占满问题
查看>>