python中实现迭代器(iterator)的方法示例

 更新时间:2017年01月19日 15:22:54   作者:瓜园耕读  
我们经常需要遍历一个对象中的元素,在Python中这种功能是通过迭代器来实现的。下面这篇文章主要给大家介绍了python中实现迭代器(iterator)的方法示例,需要的朋友可以参考借鉴,下面来一起看看吧。

概述

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

延迟计算或惰性求值 (Lazy evaluation)

迭代器不要求你事先准备好整个迭代过程中所有的元素。仅仅是在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。

今天创建了一个实体类,大致如下:

class Account():
 def __init__(self,
   account_name,
   account_type,
   account_cost,
   return_amount=0):
 self.account_name = account_name # 账户名
 self.account_type = account_type # 账户类型
 self.account_cost = account_cost # 月结费用
 self.return_amount = return_amount # 返还金额

然后创建一个实体列表:

accounts = [Account("张三", "年费用户", 450.00, 50),
  Account("李四", "月结用户", 100.00),
  Account("杨不悔", "月结用户", 190.00, 25),
  Account("任我行", "月结用户", 70.00, 10),
  Account("凌未风", "年费用户", 400.00, 40)]

我想要执行next()功能,也就是需要的时候“next”一下,得到List中的下一个元素。

直接测试一下:

结果发现List不支持next()特性。这时候,List只是一个iterable,而不是iterator。

iterable和iterator的区别如下:

  1. iterable —— 只实现了__iter__的对象;
  2. iterator —— 同时实现了__iter__和__next__方法的对象。

其中, __iter__返回iterator对象, __next__则返回迭代过程的下一个元素。

1. 让列表成为iterator

要让前面的accounts List成为iterator只需简单的一个iter()函数:

accounts_iterator = iter(accounts)
(next(accounts_iterator)).account_name

结果如下图所示:

这么简单的函数,估计还是有不少Python开发者不知道吧?

2. 自定义iterator对象

扩展开来讲,如何定义自己的iterator对象呢?其实也就是按照上面的定义,实现__iter____next__方法。

我们接下来定义一个AccountIterator类:

class AccountIterator():
 def __init__(self, accounts):
 self.accounts = accounts # 账户集合
 self.index = 0

 def __iter__(self):
 return self

 def __next__(self):
 if self.index >= len(self.accounts):
  raise StopIteration("到头了...")
 else:
  self.index += 1
  return self.accounts[self.index-1]

运行结果如:

通过这一阵折腾,next()功能就实现了。Python有不少意外的功能,还等着我们不断去探究,也许这就是Python的魅力及极客之处。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • python 同时读取多个文件的例子

    python 同时读取多个文件的例子

    今天小编就为大家分享一篇python 同时读取多个文件的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python3 selenium自动化测试 强大的CSS定位方法

    python3 selenium自动化测试 强大的CSS定位方法

    今天小编就为大家分享一篇python3 selenium自动化测试 强大的CSS定位方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 在Python3 numpy中mean和average的区别详解

    在Python3 numpy中mean和average的区别详解

    今天小编就为大家分享一篇在Python3 numpy中mean和average的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python任务调度实例分析

    python任务调度实例分析

    这篇文章主要介绍了python任务调度实现方法,实例分析了任务调度的原理与Python实现方法,需要的朋友可以参考下
    2015-05-05
  • Python+Tkinter创建一个简单的闹钟程序

    Python+Tkinter创建一个简单的闹钟程序

    这篇文章主要为大家详细介绍了如何使用 Python 的 Tkinter 库创建一个简单的闹钟程序,它可以在指定的时间播放一个声音来提醒你,感兴趣的可以学习一下
    2023-04-04
  • Python的装饰器用法学习笔记

    Python的装饰器用法学习笔记

    这篇文章主要介绍了Python的装饰器用法学习笔记,装饰器的使用是Python编程中的高级技巧,需要的朋友可以参考下
    2016-06-06
  • Python中IPYTHON入门实例

    Python中IPYTHON入门实例

    这篇文章主要介绍了Python中IPYTHON的用法入门,较为详细的分析了IPYTHON的配置及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • Python中CairoSVG库的使用教程

    Python中CairoSVG库的使用教程

    CairoSVG是一个强大的Python库,用于将SVG图像转换为PNG、PDF、PS等格式,本文就来介绍一下Python中CairoSVG库的使用教程,感兴趣的可以了解一下
    2025-01-01
  • Python绘制数据动态图的方法详解

    Python绘制数据动态图的方法详解

    这篇文章主要为大家详细介绍了如何利用Python语言绘制好看的数据动态图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手尝试一下
    2022-07-07
  • python简单贪吃蛇开发

    python简单贪吃蛇开发

    这篇文章主要为大家详细介绍了python简单贪吃蛇开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论