zoukankan      html  css  js  c++  java
  • python 迭代器,生成器,可迭代对象

    迭代器
    迭代器定义: 当类中定义了__iter__,和__next__ 两个方法
    其中 ‘iter’ 返回对象本身,self
    next’ 返回下一个数据,如果数据取完了,则抛出一个StopIteration的异常。
    这个是我们日常中使用最多的特殊方法。

    # 创建迭代器
    class Iter_test:
        def __init__(self,count):
            self.count = count
            self.num = 0
        def __iter__(self):
            return  self
        def __next__(self):
            self.num += 1
            if self.num == self.count:
                raise StopIteration
            return self.num
    obj = Iter_test(10)
    # print(obj.__next__())
    # print(obj.__next__())
    # print(obj.__next__()) # 当连续输出第10次的时候,报错异常
    for i in obj:   # 很range 的输出结果一样,首先执行__iter__方法,获取一个迭代器对象,然后不断的执行next方法,知道有StopIteration异常为止
        print(i)
    
    

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

    def func():  # 一个最简单的生成器
        yield 1
        yield 2
    
    obj = func()
    
    #next(obj)
    #next(obj)
    for i in obj: # 同样的放回生成器中的__next__方法
        print(i)
    

    这边说一下dir()方法,dir(对象) 可以展示出对象中的所有方法

    # dir(类)
    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'count', 'num']
    
    

    结合dir的展示,我们可以发现,迭代器对象和迭代器中都包含__iter__ 和 next 方法,所以说,生成器也是一种特殊的迭代器

    可迭代对象: 一个类中有__iter__方法,且返回一个迭代器对象。

    class Iter_test:
        def __iter__(self):
            return 可迭代对象
    obj = Iter_test()  #obj就是可迭代对象
    print(dir(obj))
    
    #['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']   里面只有一个__iter__方法,这个方法返回的是迭代器对象。
    # obj.__iter__  是一个可迭代器对象
    
    
  • 相关阅读:
    [转]C#、VB.NET使用HttpWebRequest访问https地址(SSL)的实现
    C#设置System.Net.ServicePointManager.DefaultConnectionLimit,突破Http协议的并发连接数限制
    [转]WebBrowser控件禁用超链接转向、脚本错误提示、默认右键菜单和快捷键
    [转]C#打印DataGridView的例子源码
    c# TreeView 父节点选中/不选时子节点都同步选中/不选
    C#中PictureBox异步加载图片
    [转]FusionCharts 3.1 破解版 – 非常好用的Flash图表控件
    配合JavaScript拖动页面中控件
    在ThinkPad T400上安装win2003 所遇问题
    C# 抛弃MoveTo来实现文件重命名
  • 原文地址:https://www.cnblogs.com/dinghc/p/15545844.html
Copyright © 2011-2022 走看看