python 生成器和迭代器的原理解析


Posted in Python onOctober 12, 2019

一、生成器简介

在python中,生成器是根据某种算法边循环边计算的一种机制。主要就是用于操作大量数据的时候,一般我们会将操作的数据读入内存中处理,可以计算机的内存是比较宝贵的资源,我认为的当要处理的数据超过内存四分之一的大小时就应该使用生成器。

二、生成器有什么特点?

1.和传统的容器相比,生成器更节省内存。

2.延迟计算,在我们需要结果时就调用一下生成器的next()方法即可。

3.可迭代,你可以像遍历list一样,遍历生成器

三、如何创建生成器?

在python中有两种方式创建生成器:生成器表达式 和 生成器函数。

生成器表达式

gen1 = (x for x in range(10))

生成器函数

生成式函数和普通函数只有一个区别,普通函数使用return返回结果,而生成器函数使用yield返回结果。
yield的特点在于,它并不是结束函数,而是在返回结果后将函数处于一种挂起状态,等待再次next函数的调用,然后从上次挂起的地方(yield)继续执行。

def gen():
a = 1
yield a
b = 2
yield b
c = 3
yield c

g = gen()

print(next(g))
print(next(g))
print(next(g))
print(next(g))

四、迭代器简介

迭代器是一个包含有限数量值的对象。

迭代器是一个可以被迭代的对象,可以遍历迭代器中的所有值。

从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由方法__iter__()和__next__()组成。

可迭代的数据类型

列表、元组、字典和集合都是可迭代的对象,可以从其中获得迭代器。

所有这些对象都可用iter()方法获取迭代器:

示例

从元组中获取一个迭代器,遍历并打印每个值:

mytuple = ("飞机", "汽车", "高铁")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

五、创建迭代器

一个对象要创建迭代器,变成可迭代的,必须实现方法:__iter__()和__next__()。

__iter__()方法必须始终返回迭代器对象本身。

__next__()方法必须返回序列中的下一项。

示例

创建一个返回数字的迭代器,从1开始,每个序列项递增1(返回1、2、3、4、5等):

class MyNumbers:
def __iter__(self):
self.a = 1
return self

def __next__(self):
x = self.a
self.a += 1
return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的检测web服务器健康状况的小程序
Sep 17 Python
python过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
Python selenium抓取微博内容的示例代码
May 17 Python
anaconda如何查看并管理python环境
Jul 05 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
python语言time库和datetime库基本使用详解
Dec 25 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
python 表格打印代码实例解析
Oct 12 #Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 #Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 #Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 #Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 #Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 #Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 #Python
You might like
PHP输出XML格式数据的方法总结
2017/02/08 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
js日期联动示例
2014/05/02 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
python自动化测试实例解析
2014/09/28 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
建筑人员岗位职责
2013/12/25 职场文书
科研先进个人典型材料
2014/01/31 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
工作会议简报
2015/07/20 职场文书