Python迭代器和生成器介绍迭代器

迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。

在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作。

常用的几个内建数据结构tuple、list、set、dict都支持迭代器,字符串也可以使用迭代操作。

你也可以自己实现一个迭代器,如上所述,只需要在类的__iter__方法中返回一个对象,这个对象拥有一个next()方法,这个方法能在恰当的时候抛出StopIteration异常即可。但是需要自己实现迭代器的时候不多,即使需要,使用生成器会更轻松。

[python] view plaincopy

#!/usr/bin/env python

# coding=utf-8

class test:

def __init__(self, input_list):

self.list = input_list

self.i = 0

def __iter__(self):

return self

def next(self):

if self.i == len(self.list):

self.i = 0

raise StopIteration

self.i += 1

return self.list[self.i - 1]

电脑技术网对《python批量处理图片图片Python迭代器和生成器介绍》总结来说,为我们学习编程很实用。

使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。

例如:

[python] view plaincopy

/* 把文件一次加载到内存中,然后逐行打印。当文件很大时,这个方法的内存开销就很大了 */

for line in open("test.txt").readlines():

print line

/* 这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行 */

for line in open("test.txt"): #use file iterators

print line

生成器

生成器的编写方法和函数定义类似,只是在return的地方改为yield。

生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。

生成器自身又构成一个迭代器,每次迭代时使用一个yield返回的值。

需要注意的是,生成器中不需要return语句,不需要指定返回值,在生成器中已经存在默认的返回语句

生成器表达式

[python] view plaincopy

(i for i in range(5))

// 返回迭代器

at 0x7ff3e8f0d960>

列表解析,返回list

[python] view plaincopy

[i for i in range(5)]

// 返回list

[0, 1, 2, 3, 4]

在这里存在一个问题,那就是range(5)会返回一个长度为5的数据,如果是range(1000)那么就会占用一个1000大小的数组空间;如果我们采用`生成器`,在需要的时候产生一个数字,那么空间的占用情况就会降低,这里我们可以使用xrange()函数来实现。

[python] view plaincopy

'''''

xrange

函数说明:用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器。

xrange示例:

'''

>>> xrange(5)

xrange(5)

>>> list(xrange(5))

[0, 1, 2, 3, 4]

>>> xrange(1,5)

xrange(1, 5)

>>> list(xrange(1,5))

[1, 2, 3, 4]

>>> xrange(0,6,2)

xrange(0, 6, 2)

>>> list(xrange(0,6,2))

[0, 2, 4]

所以xrange做循环的性能比range好,尤其是返回很大的时候,尽量用xrange吧,除非你是要返回一个列表。

python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍相关推荐

  1. python添加图片水印_python 批量添加图片水印

    python程序,用来批量添加图片水印.输入一个文件夹.水印位置(左下角.底部中间.右下角).用户名(用户名是中文的),批量给文件夹里所有的jpg和png图片在指定位置添加水印. 水印内容是:用户名 ...

  2. python查找图片区域_python批量识别图片指定区域文字内容

    python批量识别图片指定区域文字内容,供大家参考,具体内容如下 简介 对于一张图片,需求识别指定区域的内容 1.截取原始图上的指定图片当做模板 2.根据模板相似度去再原始图片上识别准确坐标 3.根 ...

  3. python 修改图片尺寸_python 批量修改图片大小

    一个文件夹下面有好多图片格式是jpg大小是1920*1080,把它们处理成1280*720并按原先图片的名保存在另一路径下 这里首先要找到给定路径下所有的图片文件,然后在修改图片文件的大小,这里用到P ...

  4. python批量转换图片格式_python批量将图片转换为JPEG格式

    标签: # -*- coding:utf-8 -*- import os from PIL import Image def resize(path): filelist = os.listdir(p ...

  5. python决策树 多分类_Python中的决策树分类:您需要了解的一切

    python决策树 多分类 什么是决策树? (What is Decision Tree?) A decision tree is a decision support tool that uses ...

  6. 如何用python批量处理图片大小_python批量修改图片大小的方法

    本文实例为大家分享了python批量修改图片大小的具体代码,供大家参考,具体内容如下 引用的模块 from PIL import Image Image的使用 def resize_image(img ...

  7. 在python中如何读取批量图片_Python批量处理图片

    1.Pillow库介绍 Pillow是Python里的图像处理库,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存.图像显示.格式转换以及基本的图像处理操作等: 安装 pip inst ...

  8. python生成器 图片分类_Python内置类型(6)——生成器

    上节内容说到Python的for语句循环本质上就是通过调用Iterable可迭代对象的__iter()__方法获得一个Iterator迭代器对象,然后不断调用Iterator迭代器对象__next() ...

  9. Python批量处理表格有用吗_python批量读入图片、处理并批量输出(可用于深度学习训练集的制作)...

    最近工作实在是太忙了,白浪花的项目没有及时跟进,很多知识也没有自学.好了,趁着现在等领导回复微信的时间,我把上周趁着零散时间做的工作总结一下.内容依然小白,但是却很重要. 项目情况简单描述一下,最终要 ...

最新文章

  1. 2021年信号与系统作业统计处理
  2. 企业架构-发布【企业架构框架-TOGAF v0.1.pdf】
  3. 矩阵分解法做推荐系统
  4. 20172329 2017-2018-2 《程序设计与数据结构》实验四报告
  5. rust怎么不要的墙拆掉_封阳台,栏杆要不要拆掉?栏杆装在玻璃窗里面还是外面...
  6. 深入了解Java 8日期和时间API
  7. poj3335 半平面交
  8. linux文件系统挂载不上,nfs文件系统在linux下挂载不上的解决办法
  9. 小米CC开机动画公布:扑面而来的青春活力
  10. java字符串数字统计_对字符串进行简单的字符数字统计 探索java中的List功能
  11. 对Proteus与Keil联调过程中遇到的怪异现象解决方法
  12. [转载] 2019年目标分类、目标检测、图像分割、弱监督的综述文章
  13. Justinmind使用教程(5)——Justinmind破解
  14. 练习 用C语言编写一个程序,解释高等数学中的映射、单射和一一映射,并表示为函数。
  15. ffmpeg 官方文档 上篇 (译)
  16. 已解决KfcError: KFC Crazy Thursday WhoEver Gives me 50 CNY, I Will Thank Him.
  17. 原创 | GIS属性表转为Excel表格
  18. C/C++实现百度API GET请求
  19. DirectShow使用大全
  20. Android 腾讯位置服务地图简单使用

热门文章

  1. 网页爬虫的设计与实现(Java版)
  2. 【TypeScript系列教程12】Number对象的基本使用
  3. c语言诡异程序,为什么C语言诡异离奇、缺陷重重,却获得了巨大的成功?
  4. 中音萨克斯指法表图_萨克斯的几个特殊指法记忆和几个概念
  5. java如何写安卓接口文档_android、java制作sdk以及自动生成文档
  6. linux 4412跑程序,荣品4412的板子上跑纯linux
  7. java调用wvsc.exe_c语言 函数的调用方法
  8. canvas图形编辑器
  9. 小程序左右标签滑块排行榜
  10. wbepack中output.filename和output.chunkFilename