• 迭代器和生成器


    # 迭代器的概念(优点:可遍历容器里的元素,省内存空间,随着循环生成)
    # 迭代器协议 —— 内部含有__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)
     
  • 相关阅读:
    action里设置session
    用Eclipse导出能直接运行的jar包
    linux下命令行运行jar文件出错
    扫描对方主机端口
    调用Axis Webservice异常: java.net.ConnectException: Connection timed out: connect
    PL/SQL 安装出现的一些问题
    调用Axis WebService异常:org.xml.sax.SAXException: Bad envelope tag: definitions
    开通博客第一天
    正则表达式
    匿名函数
  • 原文地址:https://www.cnblogs.com/hhsh/p/9539357.html
Copyright © 2020-2023  润新知