27、迭代器

可迭代对象具有一个iter()方法,可迭代对象调用__iter__()方法以后返回一个迭代器对象。也就是说一个迭代器  具有iter 和next方法

以列表为例 a = [1,2,3,4]

     a.__iter__()   返回一个迭代器对象

     a.__iter__().__next__()  就可以进行迭代

for i  in list: 的本质就是一个迭代器,它做的就是首先找到一个迭代器对象,iteration = list.__iter__(),然后 iteration.__next__()进行迭代

一个迭代器的源码:

class MyList(object):

  def __init__(self):
    self.items = []

  def add(self, item):
    self.items.append(item)

  def __iter__(self):
    my_iterator = MyIterator(self.items)
      return my_iterator

class MyIterator(object):
  def __init__(self, container):
    self.i = 0
    self.container = container

  def __next__(self):
    if self.i < len(self.container):
      ret = self.container[self.i]
      self.i += 1
      return ret
    else:
      raise StopIteration

my_list = MyList()   这个对象就可以就可以进行迭代

my_list.add(100)

my_list.add(200)

for i in my_list:

  print i

时间: 2024-10-23 17:51:30

27、迭代器的相关文章

java基础——集合

集合与数组的区别: 1.数组是固定长度的:集合的长度是可变的. 2.数组可以存储基本数据类型,也可以存储引用数据类型:集合只能存储引用数据类型. 3.数组存储元素必须是同一个数据类型:集合存储的对象可以是不同数据类型.  java集合主要有3种重要的类型: ●List:是一个有序集合,可以存放重复的数据. ●Set: 是一个无序集合,不允许存放重复的数据. ●Map: 是一个无序集合,集合中包含一个键对象和一个值对象,  键对象不允许重复,值对象可以重复. 下面是集合继承结构图-Collecti

吉萨法律时间浪费拉丝粉;阿里山

http://www.ebay.com/cln/tmotshu/book/157890749018/2015.01.27.html http://www.ebay.com/cln/tmotshu/book/157890755018/2015.01.27.html http://www.ebay.com/cln/tmotshu/book/157890757018/2015.01.27.html http://www.ebay.com/cln/tmotshu/book/157890775018/20

Day4 - 迭代器&amp;生成器、装饰器、Json &amp; pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

LeetCode OJ:Peeking Iterator(peeking 迭代器)

Given an Iterator class interface with methods: next() and hasNext(), design and implement a PeekingIterator that support the peek() operation -- it essentially peek() at the element that will be returned by the next call to next(). Here is an exampl

Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析

1. 迭代器为什么不定义成一个类,而是定义为一个接口 ?  答:假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历.但是呢? 我们想想,Java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以,存储的方式和遍历的方式应该是不同的.进而它们的遍历方式也应该不是一样的,最终,就没有定义迭代器类.        而无论你是哪种集合,你都应该具备获取元素的操作,而且,最好在辅助于判断功能,这样,在获取前,先判断.这样的话就不容易出错.也就是说,判断功能和获取

python 迭代器 一个奇怪的解决方法

一般我们在类里面写迭代器都是如下写法: 1 class IterableSomthing: 2 def __iter__(self): 3 return self 4 5 def __next__(self): 6 return 1 但是,<流畅的python>给出了不同的见解.该书指出,在数据结构内实现迭代器是个很蠢的想法,因为需要引入游标指针记录位置的缘故,这么实现迭代器会造成数据结构空间性能下降,同时,因为游标指针的独立性使得改数据结构无法并发遍历,所以又造成了时间性能的下降.代码如下

Day 20 迭代器、生成器

一. 迭代器 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个iter()方法) 3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象 二.python中for循环机制 for循环的本质:循环所有对象,全都是使用迭代器协议. 正

【Python】使用多个迭代器

如果要达到多个迭代器的效果,__iter__()只需替迭代器定义新的状态对象,而不是返回self 1 class SkipIterator: 2 def __init__(self, wrapped): 3 self.wrapped = wrapped 4 self.offset = 0 5 6 def __next__(self): 7 if self.offset >= len(self.wrapped): 8 raise StopIteration 9 else: 10 item = se