zoukankan      html  css  js  c++  java
  • 生成器

    什么是生成器?

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

    def fn():
        print("我是生成器")
        yield 'god'
    generator_obj = fn()
    generator_obj.__iter__()    # 可迭代对象
    print(generator_obj.__next__())    # 迭代器对象  
    输出:我是生成器   god
    def g_fn():
        print(1111111)
        yield '结果1'
        print(222222222)
        yield '结果2'
        print(33333333)
        yield '结果3'
        print(4444444)
        yield '结果4'
    g_obj = g_fn()
    
    # 在函数内部执行一次,在遇到下一个yield时停止,且可以拿到yield的返回值
    r1 = g_obj.__next__()
    print(r1)
    输出:1111111
    输出   结果1
    # # 从上一次停止的位置紧接着往下,在遇到下一个yield时停止,且可以拿到yield的返回值
    r2 = g_obj.__next__()
    print(r2)
    输出:222222222
    输出:结果2
    r3 = g_obj.__next__()
    print(r3) 
    输出:33333333
    输出:结果3   
    ====================
    如果继续输出超过定义函数的个数就会报错,可以通过try捕获异常解决,或者通过for循环解决
    for v in g_obj:
    print(v)

    输出:

      1111111
      结果1
      222222222
      结果2
      33333333
      结果3
      4444444
      结果4

    # 生成器的应用案例
    # 当访问的数据资源过来,可以将数据用生成器处理,有一次只能获取所有内存的一条资源
    def my_rang(min, max=0,step=1):
        if max == 0:
            min, max = max, min
        tag = min
        while True:
            if tag >= max:
                break
            yield tag
            tag += step
    range_obj = my_rang(5,10,3)
    for i in range_obj:
        print(i)
    输出值:
    5
    8
  • 相关阅读:
    关于IDEA2019.3在书写pom依赖坐标无法自动提示补全的问题
    vue props的接收格式
    axios请求添加请求头 标准写法
    VUE后台管理系统建立
    arguments
    表单验证规则
    <<>> html内显示
    vue_UI组件库vant之加载转圈
    vue_axios请求拦截器
    vue_js数字有效长度16位_超出的解决办法
  • 原文地址:https://www.cnblogs.com/yangzhaon/p/13302898.html
Copyright © 2011-2022 走看看