• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python迭代器和生成器介绍

Python迭代器和生成器介绍

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python迭代器和生成器,python 迭代器,python中的迭代器,python 迭代,python 迭代函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

迭代器

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

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

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

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

#!/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]
</div>

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

例如:

/* 把文件一次加载到内存中,然后逐行打印。当文件很大时,这个方法的内存开销就很大了 */
for line in open("test.txt").readlines():
    print line

/* 这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行 */
for line in open("test.txt"):   #use file iterators
    print line
</div>

生成器

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

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

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

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

生成器表达式
(i for i in range(5))
// 返回迭代器
<generator object <genexpr> at 0x7ff3e8f0d960>
</div>
列表解析,返回list
[i for i in range(5)]
// 返回list
[0, 1, 2, 3, 4]
</div>

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

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

</div>

您可能想查找下面的文章:

  • Python 中迭代器与生成器实例详解
  • Python使用迭代器打印螺旋矩阵的思路及代码示例
  • Python中的迭代器与生成器高级用法解析
  • 举例讲解Python中的迭代器、生成器与列表解析用法
  • python迭代器与生成器详解
  • python迭代器与生成器详解
  • 深入讲解Python中的迭代器和生成器
  • 深入讲解Python中的迭代器和生成器
  • Python迭代器和生成器介绍
  • Python的迭代器和生成器使用实例

相关文章

  • python 装饰器功能以及函数参数使用介绍
  • Python开发之快速搭建自动回复微信公众号功能
  • Python 转义字符详细介绍
  • Python中生成器和yield语句的用法详解
  • 简单讲解Python中的字符串与字符串的输入输出
  • python同时给两个收件人发送邮件的方法
  • 更改Python命令行交互提示符的方法
  • python学习笔记之调用eval函数出现invalid syntax错误问题
  • python网络编程学习笔记(一)
  • python查询mysql中文乱码问题

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python字符串的常用操作方法小结
    • Python实现栈的方法
    • python中requests小技巧
    • Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
    • Python操作列表的常用方法分享
    • python实现的登录和操作开心网脚本分享
    • python strip()函数 介绍
    • Python基于二分查找实现求整数平方根的方法
    • 在Django中创建第一个静态视图
    • Python可变参数函数用法实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有