源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-12-08 14:53 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python中实现迭代器(iterator)的方法示例
[b]概述[/b] 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 [b]延迟计算或惰性求值 (Lazy evaluation)[/b] 迭代器不要求你事先准备好整个迭代过程中所有的元素。仅仅是在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。 [b]今天创建了一个实体类,大致如下:[/b]
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 # 返还金额
[b]然后创建一个实体列表:[/b]
accounts = [Account("张三", "年费用户", 450.00, 50),
  Account("李四", "月结用户", 100.00),
  Account("杨不悔", "月结用户", 190.00, 25),
  Account("任我行", "月结用户", 70.00, 10),
  Account("凌未风", "年费用户", 400.00, 40)]
我想要执行[code]next()[/code]功能,也就是需要的时候“next”一下,得到List中的下一个元素。 [b]直接测试一下:[/b] [img]http://files.jb51.net/file_images/article/201701/2017119152029973.png?2017019152037[/img] 结果发现List不支持[code]next()[/code]特性。这时候,List只是一个iterable,而不是iterator。 [b]iterable和iterator的区别如下:[/b] [list=1] [*]iterable —— 只实现了__iter__的对象;[/*] [*]iterator —— 同时实现了__iter__和__next__方法的对象。[/*] [/list] 其中, [code]__iter__[/code]返回iterator对象, [code]__next__[/code]则返回迭代过程的下一个元素。 [b]1. 让列表成为iterator[/b] 要让前面的accounts List成为iterator只需简单的一个[code]iter()[/code]函数:
accounts_iterator = iter(accounts)
(next(accounts_iterator)).account_name
结果如下图所示: [img]http://files.jb51.net/file_images/article/201701/2017119152121200.png?2017019152130[/img] 这么简单的函数,估计还是有不少Python开发者不知道吧? [b]2. 自定义iterator对象[/b] 扩展开来讲,如何定义自己的iterator对象呢?其实也就是按照上面的定义,实现[code]__iter__[/code]和[code]__next__[/code]方法。 我们接下来定义一个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]
[b]运行结果如:[/b] [img]http://files.jb51.net/file_images/article/201701/2017119152223177.png?2017019152230[/img] 通过这一阵折腾,next()功能就实现了。Python有不少意外的功能,还等着我们不断去探究,也许这就是Python的魅力及极客之处。 [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部