• 13:迭代器、生成器部分


    课前知识点:

    1、dir([])   告诉我列表(或者其他)的所拥有的方法

    2、__iter__:只要是能被for循环的数据类型,就一定拥有__iter__方法

    3、迭代器:一个列表执行了__iter__()之后的返回值就是一个迭代器

    4、iterable:可迭代的,只要含有__iter__方法就是可迭代的

    迭代器

    迭代器的概念:

    1、内部含有__next__和__iter__的就是迭代器------------迭代器协议

    2、可迭代协议:

        可以用for循环的都是可迭代的

           可迭代的内部都有__iter__方法

        只要是迭代器,就一定可迭代

    3、【可迭代的】.__iter__方法就可以得到一个迭代器

      迭代器中的__next__方法可以一个一个的获取值

    4、for  循环其实就是在使用迭代器

       iterator  :迭代器

    5、关于for:只有是可迭代对象的时候,才能用for

      当我们遇到一个新的变量,不确定能不能用for循环的时候,就判断它是否可以迭代

    l=[1,2,3,4,5,6]
    for i in l:
    pass
    iterator=l.__iter__() #iterator是l用__iterator
    while True:
    print(iterator.__next__())

    6、迭代器的好处:

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

        节省内存空间:迭代器并不会在内存中再占用一大块

               内存,而是随着循环,每次生成一个,每次next循环每次给一个值。

    生成器函数

    1、只要是含有yield关键字的函数都是生成器函数

      yield不能和return 公用且需要写在函数内

      

    def aaa():
        print(222)
        yield 111
    
    ret=aaa()     #ret  是执行之后返回得到的生成器
    print(ret)
    print(ret.__next__())

    2、含有yield  ,在执行之后会得到一个生成器作为返回值

    3、

        

    #娃哈哈%i
    def wahaha():
        for i in range(2000000):
            yield '娃哈哈%s'%i           #使用yield,执行之后返回值是一个生成器函数
    
    
    g = wahaha()
    count = 0                           #计数功能:在执行50次之后停止
    for i in g:               #对  g   生成器进行循环
        count +=1
        print(i)
        if count > 50:
            break                       #50次之后停止
    # print('*******',g.__next__())     #停止之后执行__next__:继续执行上一次50次停止的函数
    #说明生成器是一次一次执行的 for i in g:               #继续循环执行生成器,还是接着上次执行:还是说明 count +=1              #生成器是一次一次执行的 print(i) if count > 100: break
  • 相关阅读:
    【bzoj1176】[Balkan2007]Mokia
    【bzoj1503】[NOI2004]郁闷的出纳员
    C#设置和获取系统环境变量
    结伙创业指南及翻脸法则
    Unity3D_(游戏)卡牌03_选关界面
    Unity3D_(游戏)卡牌02_主菜单界面
    Unity3D_(游戏)卡牌01_启动屏界面
    Unity3D_(游戏)跳一跳超简单制作过程
    如何将项目托管到Github上
    Android_(游戏)打飞机06:后续
  • 原文地址:https://www.cnblogs.com/wangyuxing/p/8178891.html
Copyright © 2020-2023  润新知