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展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
浅谈Python的异常处理
Jun 19 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
Pytorch入门之mnist分类实例
Apr 14 Python
python利用微信公众号实现报警功能
Jun 10 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
基于python实现从尾到头打印链表
Nov 02 Python
python IP地址转整数
Nov 20 Python
微信小程序调用python模型
Apr 21 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-rpc远程调用
2008/12/19 PHP
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
js实现网站首页图片滚动显示
2013/02/04 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中set常用操作汇总
2016/06/30 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
周年庆促销方案
2014/03/15 职场文书
司法建议书范文
2014/05/13 职场文书
春节联欢会策划方案
2014/05/16 职场文书
土木工程求职信
2014/05/29 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
银行业务授权委托书
2014/10/10 职场文书
灵山大佛导游词
2015/02/04 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏
Python代码实现双链表
2022/05/25 Python