• Python -- 生成器


    5.11 生成器

    1. 生成器初识 : 生成器本质就是迭代器。python社区生成器与迭代器是一种。生成器与迭代器的唯一区别:生成器是我们自己用python代码构建的。
    2. 生成器的产生方式:
      • 通过生成器函数
      • 通过生成器推导式
      • Python内置函数或者模块提供
    # 之前的函数
    def fucn():
        print(123)
        return 456
    ret = func()
    print(ret)
    # 执行此函数,遇到return就结束函数,将数字 456 返回给ret
    
    # 生成器函数: 只要函数中出现 yield 那么他就不是函数,是个生成器函数
    def func():
        print(1)
        print(2)
        yield 3,4,5     #  多个值返回的是元组
        yield 4
        yield 5
    ret = func()
    print(ret)   # 在这打印出的结果是 生成器函数 func 的内存地址
    # 生成器函数取值也是通过 next()  和迭代器一样
    print(next(ret))
    print(next(ret)) 
    print(next(ret)) # 一个 next 对应一个 yield 超出会报错
    
    1. yield与return的区别
      • return一般在函数中只设置一个,作用是终止函数,并且给函数的执行者返回值(多个值通过元组的形式返回)
      • yield在生成器函数中可设置多个,并不会终值函数,next会获取对应yield生产的元素(多个值通过元组的形式返回)
    # 举例 生成器函数的应用
    def bun():
        for i in range(1,10001):
            yield f'{i}包子'
    ret = bun()
    for i in range(200):
        print(next(ret))
    for i in range(200)
    	print(next(ret))
    # 多次next包子的序号是按照顺序记录的
    
    1. send(了解)
    2. yield与yield from
    def func():
        l1 = [1, 2, 3]
        yield l1
    ret = func()
    print(next(ret))
    print(next(ret))
    print(next(ret))
    
    # yield from  将一个可迭代对象的每一个元素返回给next,节省代码,提升效率 (代替for循环)
    def func():
        l = [1,2,3,4,5]
        yield from l
    ret = func()
    print(next(ret))  # 1
    print(next(ret))  # 2
    print(next(ret))  # 3
    
  • 相关阅读:
    使用jquery插件操作哈希表Hashtable的应用
    学用 ASP.Net 之 "字符串" (1): 基础
    敬告
    jQuery 练习[一]: 准备工作
    学用 ASP.Net 之 "字符串" (2): string.Format
    jQuery 练习[二]: 获取对象(1) 基本选择与层级
    学用 ASP.Net 之 "字符串" (3): string 类的非扩展方法
    jQuery 练习[二]: 获取对象(2) 定位子对象
    一个分割文本文件的小程序 回复 "jellyang" 的问题
    Delphi 7 类库继承关系表
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11061689.html
Copyright © 2020-2023  润新知