• ghujasd


    目录

    1 迭代器概念

    • 迭代器一定可迭代 (iter+next方法)

      • 可迭代不一定是迭代器 可迭代的一定都有iter方法
      • For循环其实就是在使用迭代器,就是因为迭代器,才可以for循环
    • 在工作中,别人的代码可能会返回迭代器,可迭代对象,要知道机制和怎么用,可以for循环。直接给内存地址,也有可能是可迭代的。直接iter在不在dir里判断一下.不确定能不能用for循环,也可以用这个方法。For循环的本质就是迭代器

    • 迭代器的好处:

      ​ 从容器中取值,一个一个取值,会把所有的值都取到

      ​ 节省内存空间

      ​ 迭代器并不会在内存里再占用一大块内存,而是随着循环,每次生成一个,每次next给我一个

      1580560398205

      ​ 注意一下,str类型其实是可以用for循环遍历的。

      1580560485335

    2 迭代器与可迭代

    print(isinstance([],Iterator))
    print(isinstance([],Iterable))  # 列表可迭代但不是迭代器
    class A:
        def __iter__(self):pass
        def __next__(self):pass
    a = A()
    print(isinstance(a,Iterator))
    print(isinstance(a,Iterable))
    

    3 for循环使用迭代器

    l = [1,2,3]
    for i in  l.__iter__():
        print(i)
        
    a =['a','b','c']
    for i in a.__iter__():
        print(i)
    ''' 一样,列表是可以直接循环的'''
    for i in  a:
        print(i)
    

    4 迭代器定义

    #-*-coding:utf-8-*-
    import os
    import time
    '''
    迭代器
    只要有for循环的数据类型,都有这个__iter__方法
    '''
    print('__iter__' in  dir(int))
    print('__iter__' in  dir(list))
    print('__iter__' in  dir(str))
    print('__iter__' in  dir(set))
    print('__iter__' in  dir(dict))
    print('__iter__' in  dir(tuple))
    print('__iter__' in  dir(bool))
    print('__iter__' in  dir(enumerate))
    print('__iter__' in  dir(range(1)))
    
    print([].__iter__())  # 执行了__iter__() 方法之后的返回值就是迭代器
    print(dir([]))
    print(dir([].__iter__()))
    print(set(dir([].__iter__()))-set(dir([])))
    print([1,'a'].__iter__().__length_hint__())  # 元素个数
    

    5 定义

    '''迭代器
      1、只要有for循环的数据类型,都有这个__iter__方法
      2、只要含有__iter__方法的都是可迭代的--可迭代协议
      3、[]._iter__() 得到 迭代器,->通过__next__()就可以从迭代器中一个一个的取值
      4、迭代器协议:内部含有_next__()和_iter__() 的就是迭代器
      5、不是迭代器,for循环会报错
    '''
    l = [1,2,3]
    l.__iter__().__next__()  # 只有__next__()能取值
    iterator = l.__iter__()  # 迭代器
    print(iterator.__next__())
    print(iterator.__next__())
    print(iterator.__next__())
    
  • 相关阅读:
    Druid初步学习
    跨区域的application共享问题。
    jsp系统时间和时间对比(活动结束不结束)
    Intellij Idea中运行tomcat 报內存溢出
    SpringMVC -rest风格修改删除
    Redis服务器的创建服务
    Double和double的区别
    1.Redis安装(转)
    查看Mysql执行计划
    linux查询日志命令总结
  • 原文地址:https://www.cnblogs.com/sunnybowen/p/12250264.html
Copyright © 2020-2023  润新知