• 生成器


    一、什么是生成器?

      在函数内但凡出现yield关键字,再调用函数就不会执行函数体代码,会返回一个值,该值称之为生成器,这个生成器本质就是迭代器。

    def func():
        print('first')
        yield
        print('second')
        yield
        print('third')
        yield
    
    res1 = func()
    print(res1)
    res1.__iter__()
    res1.__next__()

    二、为什么要有生成器

      生成器是一种自定义迭代器的方式。

    三、如何用生成器?

      1、有__iter__方法-->iter()

      2、__next__方法-->next()

      3、for循环

    # def func():
    #     print('first')
    #     yield 1  #暂停
    #     print('second')
    #     yield 2
    #     print('third')
    #     yield 3
    #
    # res = func()
    # print(res)
    # print(res.__iter__().__iter__() is res)
    # # res.__next__()
    # # next(res)  #next会触发函数的从头开始的执行,碰到yield就停掉了。
    # res1 = next(res)  #next拿到返回值兵赋值给res1,当做第一次取值,函数并且暂停到这个位置
    # print('第一次的返回值',res1)
    
    
    
    # def func():
    #     yield 1
    #     yield 2
    #     yield 3
    #
    # res = func()
    # print(next(res))
    # print(next(res))
    # print(next(res))
    # # print(next(res))   #取不到值会报错
    #
    
    
    
    def func():
        print('first')
        yield 1  #暂停
        print('second')
        yield 2
        print('third')
        yield 3
    
    res = func()
    
    
    for item in res:       #for循环会先调用res的iter()方法拿到迭代器对象,然后会next()一次res,把结果给item,运行一次否循环的循环体
        # pass
        print(item)
  • 相关阅读:
    【从零开始搭建uniapp开发框架】(九)—— ajax网络请求封装
    HDU 4276 The Ghost Blows Light
    HDU 3530 Subsequence
    HDU 4268 Alice and Bob
    HDU 4267 A Simple Problem with Integers
    HDU 4284 Travel
    HDU 4277 USACO ORZ
    使用iQuery的getJSON方法实现跨域
    【浅谈】<.net>使用AspNetPager分页
    java处理字符串公式运算
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/12560154.html
Copyright © 2020-2023  润新知