迭代器和可迭代对象

from collections.abc import Iterator

class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list

    def __iter__(self):  # 一般情况下都是这个样做
        return MyIterator(self.employee)

    # def __getitem__(self, item):
    #     return self.employee[item]

class MyIterator(Iterator):
    def __init__(self, employee_list):
        self.iter_list = employee_list
        self.index = 0

    def __next__(self):
        # 真正返回迭代值的逻辑
        try:
            word = self.iter_list[self.index]
        except IndexError:
            raise StopIteration  # 只有抛出这个异常for循环才能捕获到
        self.index += 1
        return word

if __name__ == "__main__":
    company = Company(["tom", "bob", "jane"])
    my_itor = iter(company)
    # while True:
    #     try:
    #         print (next(my_itor))
    #     except StopIteration:
    #         pass

    # next(my_itor)
    for item in company:
        print(item)

为啥不在可迭代对象写迭代器呢?这个是一个编程规范

原文地址:https://www.cnblogs.com/zhoulixiansen/p/10079536.html

时间: 2024-11-05 20:26:07

迭代器和可迭代对象的相关文章

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

[可迭代对象]保存的是已经生成好的数据,占用大量的空间有__iter__方法 就是可迭代对象(Iterable) [迭代器]保存的是生成数据的方法,占用极小的空间,需要时才返回数据既有__iter__,也有__next__ 就是迭代器(Iterator) [生成器]是一个[特殊]的迭代器,保存生成数据的方法(标志就是def中的[yiled],有了yield的def就不是函数(function) 生成器的send(参数) 可以在唤醒时返回参数(需要变量接收), 可迭代对象(iterable):能用

理解迭代器和可迭代对象

前言: 之前在迭代器.可迭代对象这一部分一直有些混淆,结合一些资料,表达我对这些概念的理解,未必都对,但是适合刚开始入手的朋友们从零开始理解 开门见山首先介绍可迭代对象和迭代器的通俗理解 迭代器就是能被next()调用得到下一次迭代值的对象,迭代器不直接保存迭代的序列值,而保存得到下一次迭代值的算法 可迭代对象就是能被iter()方法调用得到迭代对象的对象,只有可迭代对象才可用于for循环 for循环的底层实现原理: 以下是一个for循环的格式 for i in 可迭代对象: 循环体 实质是调用

迭代器 and 可迭代对象

可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的generator function. 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable. 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了. 可以被next()函数调用并不断返回下一个值的对象称为迭代器

学习7: 列表生成式,生成器,迭代器,可迭代对象

1) 列表生成式,即创建列表的方式 列表生成式,这里是中括号[] >>> [x*x for x in range(0,10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ

Python生成器、迭代器、可迭代对象

把一个列表[]改成()就创建了一个生成器:generator,generator保存的是算法. 可以用于for循环的数据类型:1.集合类型:list tuple dict set str2.generator 可以直接作用于for循环的对象统称为:可迭代对象(Iterable) from collections import Iterable print(isinstance([],Iterable)) print(isinstance({},Iterable)) print(isinstanc

python的生成器与迭代器和可迭代对象

来简单的说下python中的生成器和可迭代对象以及迭代器的问题.只是简单地记录一下并不涉及太深入的内容. 首先来说一下什么是生成器,先看下面的代码: 1 #_*_ coding:utf-8 _*_ 2 3 result = (x for x in range(10)) 4 5 ''' 6 下面print的打印结果 7 <generator object <genexpr> at 0x0000026FA092B360> 8 ''' 9 print(result)  上面的这种代码其实

迭代器 生成器, 可迭代对象以及应用场景

可迭代对象: 实现了迭代器协议的对象就是可迭代对象(实现方式是,实现iter方法) 迭代器 迭代器对象就是实现了iter() 和 next()方法的对象.其中iter()返回迭代器本身,而next()返回容器的下一个元素,在结尾处引发StopInteration异常. 迭代器有两个方法: iter() 和 next() it = iter(iterable) # 将一个可迭代对象转换为迭代器 next(it) # 获取下一个迭代器中的下一个值 `注意` list dic tuple string

Python全栈开发之---迭代器、可迭代对象、生成器

1.什么叫迭代 现在,我们已经获得了一个新线索,有一个叫做"可迭代的"概念. 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代.那么如果"可迭代",就应该可以被for循环了. 这个我们知道呀,字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. 我们怎么来证明这一点呢? 1 from collections import Iterable 2 3 l = [1,2,3,4] 4 t = (1,2,3,4) 5 d =

迭代器、可迭代对象、迭代器对象、生成器、生成器表达式和相关的面试题

迭代器: 迭代的工具.迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的.如计算机中的迭代开发,就是基于软件的上一个版本更新.以下代码就不是迭代,它只是单纯的重复 可迭代对象 python中一切皆对象,对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象. 可迭代的对象:Python内置str.list.tuple.dict.set.file都是可迭代对象. 迭代器对象 只有字符串和列表都是依赖索引取值的,而其他的可迭代