博客
关于我
python中yield的用法详解——最简单,最清晰的解释
阅读量:798 次
发布时间:2023-03-09

本文共 1417 字,大约阅读时间需要 4 分钟。

Python中的yield关键字主要用于定义生成器函数,生成器函数可以通过yield关键字产生可迭代对象。生成器函数能够在不存储所有数据的情况下,按需生成和处理数据,非常适合处理大量或无限数据的情况。

生成器函数的基本用法

def foo():    print("starting...")    while True:        res = yield 4        print("res:", res)

调用生成器函数

g = foo()print(next(g))  # 输出: starting...4print("*" * 20)print(next(g))  # 输出: res: None4

代码解释

  • 生成器函数的定义:def foo(): 定义了一个生成器函数,函数体内有一个无限循环while True:。
  • 第一次调用next(g):
    • 生成器函数开始执行,首先打印"starting..."。
    • 进入while循环,执行res = yield 4,这里yield 4会暂停函数的执行,并返回4给调用者。
    • 所以,第一次调用next(g)会输出starting...4。
  • 打印20个星号:这不会影响生成器的执行,仅仅是打印一个字符串。
  • 第二次调用next(g):
    • 生成器函数从上次yield的位置继续执行。
    • res = yield 4,因为上一次没有传递值,所以res会是None。
    • 所以,第二次调用next(g)会输出res: None。
    • 接着,函数继续到yield 4,第三次调用next(g)会再次返回4。
  • 生成器的优势

    • 内存优化:生成器不会在内存中存储所有数据,而是按需生成数据,非常适合处理大数据或无限数据。
    • 资源管理:生成器可以用来控制资源的使用,比如数据库连接、文件读取等。
    • 并行处理:生成器可以在多个方面实现并行处理,例如并行读取文件内容。

    更高级的生成器用法

    def foo(num):    print("starting...")    while num < 10:        num += 1        yield num
    for n in foo(0):    print(n)

    代码解释

  • 生成器函数定义:def foo(num): 定义了一个接受参数num的生成器函数。
  • 循环执行:while num < 10:,当num小于10时,执行循环体。
  • 生成值:yield num,每次循环都会生成当前的num值,然后暂停。
  • 调用生成器函数:for n in foo(0):,调用生成器函数,按需生成值,并打印每个值。
  • 进一步优化

    import itertools
    horses = [1, 2, 3, 4]races = itertools.permutations(horses)print(list(races))

    代码解释

  • 导入库:import itertools。
  • 定义列表:horses = [1, 2, 3, 4]。
  • 生成排列组合:races = itertools.permutations(horses)。
  • 转换为列表:print(list(races)),将生成器对象转换为列表对象。
  • 总结

    生成器函数通过yield关键字,可以按需生成数据,不需要存储所有数据在内存中,非常适合处理大量或无限数据。同时,生成器函数可以灵活控制资源的使用,提升程序的效率和性能。

    转载地址:http://gilfk.baihongyu.com/

    你可能感兴趣的文章
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>
    python与flask_Python编程中flask的简介与简单使用
    查看>>
    python与图灵机器人交互(WXPY版本)
    查看>>
    python与运算符_python运算符
    查看>>
    python两个列表获取交集,并集,差集
    查看>>
    python两个字典合并,两个list合并
    查看>>
    Python两个版本共存时,命令行升级pip
    查看>>
    Python两个版本共存时,怎么验证是否安装成功 scrapy
    查看>>
    Python两个版本共存时,通过pip安装Scrapy
    查看>>
    python两组变量的相关关系散点图_变量是什么?变量间的两种关系——函数关系和相关关系(小学版)...
    查看>>
    Python中 pass语句的作用
    查看>>
    python中 urllib, urllib2, httplib, httplib2 几个库的区别
    查看>>
    python中 yaml库 & json库 & xmltodict库使用
    查看>>
    python中 将你的名字转化成为二进制并输出
    查看>>
    Python中*args 和**kwargs的用法
    查看>>
    Python中*args 和**kwargs的用法
    查看>>
    Python中*args和**kwargs的使用
    查看>>
    python中0、1、True、False、if条件
    查看>>
    python中argparse模块关于 parse_args() 函数详解(全)
    查看>>