当前位置:首页 > 科技  > 软件

Python中的Yield关键字,你了解多少?

来源: 责编: 时间:2023-12-11 17:19:44 368观看
导读在Python中,yield是一个重要的关键字,它与生成器(Generator)和懒惰计算(Lazy Evaluation)密切相关。yield允许函数在迭代过程中产生值,而不必一次性将所有值计算出来。这种特性在处理大数据集或无限序列时尤其有用。一、yiel

NTI28资讯网——每日最新资讯28at.com

在Python中,yield是一个重要的关键字,它与生成器(Generator)和懒惰计算(Lazy Evaluation)密切相关。NTI28资讯网——每日最新资讯28at.com

yield允许函数在迭代过程中产生值,而不必一次性将所有值计算出来。这种特性在处理大数据集或无限序列时尤其有用。NTI28资讯网——每日最新资讯28at.com

一、yield关键字

1、yield的基本概念

yield是一个关键字,用于定义生成器函数。生成器函数可以被暂停和恢复,允许逐个生成值而不需要一次性计算所有值。当生成器函数执行到yield语句时,它将生成一个值,并保存其状态,然后等待下一次调用来继续执行。NTI28资讯网——每日最新资讯28at.com

2、生成器的工作原理

生成器是一种特殊类型的迭代器,由生成器函数创建。生成器函数包含至少一个yield语句,它可以返回一个值,并在下一次迭代时从yield语句处继续执行。这允许生成器函数的状态保持不变,而值可以逐个生成。NTI28资讯网——每日最新资讯28at.com

以下是一个简单的生成器函数示例:NTI28资讯网——每日最新资讯28at.com

def simple_generator():    yield 1    yield 2    yield 3gen = simple_generator()print(next(gen))  # 输出:1print(next(gen))  # 输出:2print(next(gen))  # 输出:3

示例中,simple_generator是一个生成器函数,它包含三个yield语句。当我们创建生成器对象gen并调用next()函数时,生成器函数在每次调用后从yield语句处继续执行,并生成相应的值。NTI28资讯网——每日最新资讯28at.com

二、创建生成器

1、生成器函数

生成器函数是一种包含yield语句的函数,用于生成值。生成器函数的执行可以被多次暂停和继续,每次暂停都会生成一个值。NTI28资讯网——每日最新资讯28at.com

以下是一个生成器函数的示例,用于生成斐波那契数列:NTI28资讯网——每日最新资讯28at.com

def fibonacci_generator():    a, b = 0, 1    while True:        yield a        a, b = b, a + bgen = fibonacci_generator()for _ in range(10):    print(next(gen))  # 输出前10个斐波那契数

2、生成器表达式

除了生成器函数,Python还提供了生成器表达式,它类似于列表推导式,但是返回一个生成器对象,逐个生成值。生成器表达式的语法更紧凑。NTI28资讯网——每日最新资讯28at.com

以下是一个生成器表达式的示例,用于生成自然数的平方:NTI28资讯网——每日最新资讯28at.com

gen = (x**2 for x in range(1, 6))for value in gen:    print(value)  # 输出:1 4 9 16 25

生成器表达式可以在不创建额外的函数的情况下生成值,适用于简单的迭代需求。NTI28资讯网——每日最新资讯28at.com

三、yield的高级用法

1、生成器的状态保存

生成器函数在每次执行时都会保持其状态。这意味着它可以用于生成无限序列或大数据集,而不必将所有数据存储在内存中。NTI28资讯网——每日最新资讯28at.com

以下是一个无限递增的生成器示例:NTI28资讯网——每日最新资讯28at.com

def infinite_increment():    num = 0    while True:        yield num        num += 1gen = infinite_increment()for _ in range(5):    print(next(gen))  # 输出:0 1 2 3 4

2、生成器的数据过滤

yield可以与条件结合使用,用于过滤生成的值。这允许生成器仅生成符合特定条件的值。NTI28资讯网——每日最新资讯28at.com

以下是一个示例,生成偶数的生成器:NTI28资讯网——每日最新资讯28at.com

def even_numbers():    num = 0    while True:        if num % 2 == 0:            yield num        num += 1gen = even_numbers()for _ in range(5):    print(next(gen))  # 输出:0 2 4 6 8

3、生成器的懒惰计算

生成器的懒惰计算是一种在需要时计算值的方式,而不是一次性计算所有值。这在处理大型数据集或无限序列时非常有用。NTI28资讯网——每日最新资讯28at.com

以下是一个示例,生成自然数的平方,但只计算前5个:NTI28资讯网——每日最新资讯28at.com

def lazy_square(limit):    for x in range(1, limit + 1):        yield x**2gen = lazy_square(5)for value in gen:    print(value)  # 输出:1 4 9 16 25

懒惰计算允许在处理大量数据时节省内存和计算资源。NTI28资讯网——每日最新资讯28at.com

总结

yield的高级用法包括生成器的状态保存,允许无限递增或递减的生成器。还可以与条件结合使用,用于过滤生成的值,仅生成符合特定条件的值。最重要的是,yield支持懒惰计算,允许在需要时计算值,而不是一次性计算所有值,从而节省内存和计算资源。NTI28资讯网——每日最新资讯28at.com

在处理大型数据集、无限序列或需要逐个生成值的情况下,yield是一个强大的工具。通过深入理解yield,可以更好地利用生成器和懒惰计算,提高代码的效率和可维护性。NTI28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-42219-0.htmlPython中的Yield关键字,你了解多少?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Java异常处理:理解异常类型和处理策略

下一篇: 揭秘 Python 软件基金会首位常驻安全人员工作笔记

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,“7
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top