• 012_迭代器


    1,可迭代对象
        list dic str set tuple f=open() range() enumrate
    2,dir()查看一个数据类型的所有方法
    print(dir([]))
    
    3,双下方法
        是可以用特殊符号引用的方法
    print([1].__add__([2]))     #>>>[1, 2]
    print([1]+[2])      #>>>[1, 2]      #这个其实执行的就是上面的代码
    
    4,Iterable 可迭代的  __iter__
        只要是能被for循环的数据类型,就一定拥有 __iter__方法,即可迭代
    print('__iter__' in dir(list))    #>>>True  #判断是否可迭代
    
    5,一个列表执行了 __iter__()之后的返回值就是一个迭代器
     print([].__iter__())
    
    6,找迭代器独有的方法
    print(dir([]))      #[]不是迭代器
    print(dir([].__iter__()))  #[].__iter__()是迭代器
    print(set(dir([].__iter__())) - set(dir([])))  #求差集,找到迭代器独有的方法
    print([1, 'a', 'ab'].__iter__().__length_hint__())  #元素个数
    后两个结果:
    {'__length_hint__', '__setstate__', '__next__'}
    3
    #方法说明:
    '__length_hint__' ————>元素个数
    '__setstate__' ————>指定迭代开始位置
    '__next__' ————>取下一个值
    7,迭代一个列表
    lis = [1, 2, 3]
    iterator = lis.__iter__()   #迭代器
    print(iterator.__next__())  #依次取值
    print(iterator.__next__())
    print(iterator.__next__())
    print(iterator.__next__())  #超出范围报错

    8,

    • iterable 的迭代的 ————>__iter__ #只要含有__iter__方法的都是可迭代的
    • [].__iter__()迭代器 —————>__next__ #通过next就可以从迭代器中一个一个的取值
    • 只要含有__iter__方法的都是可迭代的————>可迭代协议
    • 迭代器协议————内部含有__next__和__iter__方法的就是迭代器
    9,isinstance(被判断,是什么) 是判断是不是那个东西
    from collections import Iterable
    from collections import Iterator
    print(isinstance([],Iterator))
    print(isinstance([],Iterable))
    
    10,迭代器的概念:
        可迭代协议:只要含有__iter__方法的但是可迭代的
        迭代器协议:内部含有__iter__和__next__方法的就是迭代器
      注:
        ①可以被for循环的都是可迭代的
        ②可迭代的内部都有__iter__方法
        ③只要是迭代器就一定可迭代
        ④可迭代的__iter__()方法就可得到一个迭代器
        ⑤__next__()可获取迭代器一个一个的值
        ⑥for循环实际上就是再使用迭代器
    11,for循环
        只要是可迭代对象的时候才能用for
        当我们遇到一个未知的变量,不能确定能不能for循环时,就判断它是否可迭代
       11.1,for循环的执行本质:
           for i in L:
         pass
           相当于:第一步:iterator = L.__iter__()
         第二步:iterator.__next__()
        11.2,模拟一个for迭代器
        
    lis = [1,2,3,4]
    iterator = lis.__iter__()
    while True:
        print(iterator.__next__())
    
    12,迭代器的好处
        ①很方便使用,且只能取所有的数据一次
        ②从容器类型中一个一个的取值,会把所有的值都取到
        ③可以节省内存空间,迭代器并不会在内存中占用一大块内存,而是随着循环每次生成一个
  • 相关阅读:
    UIWebView stringByEvaluatingJavaScriptFromString的使用方法
    手动截图
    KVO与KVC的使用(转)
    LKDBHelper Sqlite操作数据库
    GCD多线程的使用
    ios --- 调用系统"设置"里的功能(转)
    ios开发小技巧(转)
    url字符串中含中文的转码方法
    ios 照片编辑的view封装
    字符串去空格
  • 原文地址:https://www.cnblogs.com/eternity-twinkle/p/10507365.html
Copyright © 2020-2023  润新知