迭代器&迭代对象&生成器

迭代器 & 迭代对象 & 生成器

包含__next__ 和 __iter__两个方法的对象为迭代器

__next__方法返回单个元素

__iter__方法返回迭代器本身

可迭代对象包含__iter__方法,每次都实例化一个新的迭代器

因此,迭代器可以迭代,但是可迭代对象不一定是迭代器

生成器是一种特殊的迭代器

import re
import reprlib

RE_WORD = re.compile(‘\w+‘)
class Sentence:

    def __init__(self, text):
        self.text = text
        self.words = RE_WORD.findall(text)

    def __repr__(self):
        return ‘Sentence(%s)‘ % reprlib.repr(self.text)

    def __iter__(self):  # <1>
        return SentenceIterator(self.words)  # <2>

class SentenceIterator:

    def __init__(self, words):
        self.words = words  # <3>
        self.index = 0  # <4>

    def __next__(self):
        try:
            word = self.words[self.index]  # <5>
        except IndexError:
            raise StopIteration()  # <6>
        self.index += 1  # <7>
        return word  # <8>

    def __iter__(self):  # <9>
        return self

Sentence是一个可迭代对象,通过__iter__方法返回一个新的迭代器

SentenceIterator是一个迭代器,通过__iter__返回迭代器本身,每次调用__next__只返回一个值

原文地址:https://www.cnblogs.com/zengchunyun/p/9037481.html

时间: 2024-10-10 11:12:54

迭代器&迭代对象&生成器的相关文章

迭代器/可迭代对象/生成器

先上本文主题: 迭代器一定是可迭代对象,可迭代对象不一定是迭代器; 可迭代对象要满足什么条件才能使用 for 正确遍历; 生成器一定是迭代器. 如何判断是否是迭代器/可迭代对象 from collections.abc import Iterator,Iterable t = [] # 是否为迭代器 isinstance(t,Iterator) # 是否为可迭代对象 isinstance(t,Iterable) 可迭代对象 实现了__iter__魔法方法,就是可迭代对象. class Test:

王亟亟的Python学习之路(七)-date,continue,迭代对象,生成器

转载请注明出处:王亟亟的大牛之路 大多数的语言都提供了时间操作的相应类,诸如java的java.util.Date,java.util.Calendar等等, Python中是time 和 calendar . 首先需要导包import time; 然后就可以使用了,mTime= time.time()那结果呢? 1448004021.1337154 (而且这个数字还继续在变) WHY? 用ticks计时单位返回从12:00am, January 1, 1970(epoch) 开始的记录的当前操

完全理解 Python 迭代对象、迭代器、生成器

2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 原文出处: liuzhijun 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网友指正. 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式

python基础一 ------利用生成器生成一个可迭代对象

#利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态,当再次调用时从冻结状态开始 1 class PrintNumbers(object): 2 """docstring for PrintNumbers""" 3 def __init__(self, start,end): 4 self.start

python基础之迭代器协议和生成器

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

第八篇 迭代器协议和生成器

第八篇 迭代器协议和生成器 阅读目录 一 递归和迭代 二 什么是迭代器协议 三 python中强大的for循环机制 四 为何要有for循环 五 生成器初探 六 生成器函数 七 生成器表达式和列表解析 八 生成器总结 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

Python学习之路8?迭代器协议和生成器

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

迭代器|三元表达式|生成器

import numpy as np '''迭代:每次获得的结果都基于上次结果来的(更新换代)迭代器协议:对象必须提供一个next方法 ,执行该方法,要么返回迭代器的下一项,要么引起异常迭代对象(节省内存):实现迭代器协议的对象(内部:__iter__()方法) for循环的本质:循环所有对象,全部使用迭代器协议for循环可以遍历(序列[字符串.列表.元祖].非序列[字典.集合.文件对象])''''''疑问解答:(字符串.列表.元祖.字典.集合.文件对象)都不是可迭代对象,只是for循环调用了他

Python 迭代对象、迭代器、生成器详解

在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict comprehension)众多概念参杂在一起,难免让初学者一头雾水,本文将一一为大家进行介绍,希望对大家学习python有所帮助. 容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用 in ,  not in 关键字判断元素是否包含在容器