迭代器

作者: 栀心_d553 | 来源:发表于2020-02-10 14:33 被阅读0次

列表 元祖 字典 集合 字符串 都可以使用for循环,这些都可以迭代

如何判断一个元素是否可以被迭代?
1、导入一个包
from collections import Iterable
print(isinstance([11,22,33],Iterable))
2、格式
print(isinatance(元素,Iterable))
说明列表【11,22,33】可以被迭代,会返回true

假设有个for循环(如果想要循环遍历的话)

for temp  in ***—object:
  pass

1、判断***—object是否可以迭代

   看***—object对象的类中是否有__iter__方法

2、在第一步成立的前提下,调用iter函数,得到***—object对象的iter方法的返回值

          调用iter函数会自动调用__iter__方法

3、iter犯法的返回值就是一个迭代器

   for循环会自动调用迭代器的__next__方法,
    调用一次取一个给temp

!!!一个类中有一个iter就可以被迭代;如果是既有iter又有next就可以称为迭代器

代码


from collections import Iterable
from collections import Iterator
import time
class Classmate(object):
##object是为了兼容python2
    def __init__(self):
        self.names = list()
        #names就是一个列表
        self.current_num = 0
    def add(self,name):
        self.names.append(name)
    def __iter__(self):
        # 如果想要一个对象成为可迭代的对象,必须使用iter方法
        #使用这个方法必须要返回一个对象的引用,
        #返回的对象满足的条件:必须有一个iter方法和next方法
        # return ClassIterator(self)
        return self
        #返回自己的原因,自己就有iter


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


# class ClassIterator(object):
#     def __init__(self,object):
#         self.object = object
#         self.current_num = 0
#     def __iter__(self):
#         pass
#     def __next__(self):
#         if self.current_num < len(self.object.names):
#             ret = self.object.names[self.current_num]
#             self.current_num += 1
#             return ret
#         else:
#             raise StopIteration
            #主动抛出一个异常,for循环会自动通知
classmate = Classmate()
classmate.add('小明')
classmate.add('小洪')
classmate.add('小凉')

# print('判断classmate是否是可以迭代的对象',isinstance(classmate,Iterable))
#
# #iter的调用
# classmate_iterator  = iter(classmate)
# print("classmate_iterator是否为迭代器",isinstance(classmate_iterator,Iterator))
#
# print(next(classmate_iterator))
for name in classmate:
    print(name)
    time.sleep(1)

迭代器的优点是什么?为什么使用迭代器?

迭代器能实现for,能取里面的数据,但是他里面所保存的不是生成这个序列的结果,而是生成这个序列的方式,占用空间极小。

相关文章

  • 迭代器

    本节实验我们将为大家讲解迭代器,主要介绍 5 种常见迭代器:输入、输出迭代器,前向逆向迭代器,双向迭代器和随机迭代...

  • 迭代器与生成器

    迭代(iteration)与可迭代(iterable) 迭代器 迭代器协议(iterator protocol) ...

  • 10.迭代器与生成器

    一、迭代器 1). 迭代器概述 类比Java中的迭代器,参考迭代器模式https://www.jianshu.co...

  • 9 ES6 迭代器、生成器

    1、Iterator迭代器 ->遵循迭代模式思想实现,分为内部迭代器、外部迭代器,聚焦点:添加迭代接口 (1).迭...

  • C++boolan part3_week4

    1. 迭代器 1.1 迭代器的种类 使用随机访问迭代器的容器:array, vector,deque使用双向迭代器...

  • 迭代器模式

    内部迭代器和外部迭代器 简单地讲,内部迭代器就是类似 forEach 的迭代器,其内部迭代逻辑已经制定好,只要传入...

  • vector erase的用法

    正向迭代器: 反向迭代器:

  • 10 python中的迭代器和生成器

    1 迭代器 遵循了迭代器协议的对象为迭代器,即内部调用iter()方法转化成的对象为成迭代器。 1.1 迭代器的特...

  • 第7章迭代器模式

    第7章迭代器模式 7.1 jQuery中的迭代器 7.2 实现自己的迭代器 7.3 内部迭代和外部迭代 1内部迭代...

  • 我们来讲讲Python的迭代器

    迭代器 迭代器的作用:迭代器的作用就是迭代,可以让不是序列但是表现出序列行为,例如迭代字典的键,文件的行 迭代器的...

网友评论

      本文标题:迭代器

      本文链接:https://www.haomeiwen.com/subject/wxyyxhtx.html