zoukankan      html  css  js  c++  java
  • 迭代器和生成器

    # 迭代器的概念(优点:可遍历容器里的元素,省内存空间,随着循环生成)
    # 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器
    # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
    # 可迭代的.__iter__()方法就可以得到一个迭代器
    # 迭代器中的__next__()方法可以一个一个的获取值
    # from collections import Iterable
    # from collections import Iterator
    # print(isinstance([], Iterator))
    # print(isinstance([].__iter__(), Iterator))
    # print(isinstance([], Iterable))
    #
    #
    # print('__iter__' in dir([].__iter__()))
    # print('__iter__' in dir(123))           # False, int不可迭代
    #
    # # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
    # l = [1,2,3,4]
    # iterator = l.__iter__()
    # print(iterator)
    # print(iterator.__next__())
    # print(iterator.__next__())
    
    
    # for其实就在使用迭代器
    #
    # for i in range(10):                 # 等同于iter = range(10).__iter__()
    #     print(i)                        # 循环执行print(iter.__next__())
    # ----------------------------------------------------------------------------------------------------------------------------------------------
    # #生成器就是一个迭代器,用yield,不能和return公用
    # def generator():
    #     print(1)
    #     yield 'a'
    # yield 'b'
    # yield 'c'
    # # g = generator() # 得到一个生成器作为返回值,实际上是迭代器 # print(g) # print(g.__next__()) # 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 # def feibo(max): # n, a, b = 0, 0, 1 # while n < max: # yield b # a, b = b, a + b # n += 1 # # l = [x for x in feibo(20)] # print(l)

    def generators():
    print(12345)
    content = yield 'qwert'
    print('!!!!!!!!',content)
    yield 'ppppp'

    g = generators()
    g1 = g.__next__()
    print(g1)
    g1 = g.send('hello')
    print(g1)
     
  • 相关阅读:
    涡轮增压中冷器
    TortoiseSVN文件及文件夹图标不显示解决方法
    无线路由器无法登录管理界面,怎么办?
    TP-LINK-TL-WVR450G路由器经常断网
    阿里云DNS地址
    农村社保和职工社保能同时交吗?
    电视机顶盒遥控器可以同时遥控电视和机顶盒
    各种汽车的高端品牌
    金蝶云星空系统打印提示:对象不支持“SetGraphicsMode”属性或方法
    怎么去掉视频的背景音乐?
  • 原文地址:https://www.cnblogs.com/hhsh/p/9539357.html
Copyright © 2011-2022 走看看