当前位置: 首页 > wzjs >正文

手机网站趋势百度竞价点击一次多少钱

手机网站趋势,百度竞价点击一次多少钱,江苏住房城乡建设厅网站,义乌市建设银行网站博客目录 一、yield 的基本概念二、生成器函数与普通函数的区别三、yield 的工作机制四、yield 的常见使用场景五、yield 的高级用法六、性能考量 一、yield 的基本概念 在 Python 编程语言中,yield是一个至关重要的关键字,它用于定义生成器函数&#x…

csdn

博客目录

    • 一、yield 的基本概念
    • 二、生成器函数与普通函数的区别
    • 三、yield 的工作机制
    • 四、yield 的常见使用场景
    • 五、yield 的高级用法
    • 六、性能考量

一、yield 的基本概念

在 Python 编程语言中,yield是一个至关重要的关键字,它用于定义生成器函数(generator function)。与普通函数使用return返回结果不同,生成器函数使用yield产生一个值,同时"冻结"函数的当前状态,使得下次调用时可以从冻结点继续执行。

yield的出现使得 Python 能够优雅地实现惰性计算(lazy evaluation),这种特性在处理大数据集或无限序列时尤为有用。传统函数在返回结果后会释放所有资源并忘记之前的执行状态,而生成器函数则能够记住它的状态,在需要时继续产生下一个值。
在这里插入图片描述

二、生成器函数与普通函数的区别

生成器函数与普通函数在定义上非常相似,唯一的区别在于前者使用yield而非return。但这种表面上的微小差异带来了行为上的巨大不同:

  1. 执行流程:普通函数从开始执行到 return 语句后立即退出,而生成器函数在遇到 yield 时会暂停执行,保存所有局部变量状态,等待下一次调用。

  2. 内存使用:普通函数需要一次性计算所有结果并存储在内存中,生成器则是按需生成值,大大节省内存空间。

  3. 返回值:普通函数返回一个具体的值或对象,生成器函数返回一个生成器对象,这个对象遵循迭代器协议。

例如,比较以下两个函数:

# 普通函数
def squares(n):result = []for i in range(n):result.append(i*i)return result# 生成器函数
def squares_gen(n):for i in range(n):yield i*i

第一个函数会一次性生成所有平方数并存储在列表中,而第二个函数则会在每次迭代时生成一个平方数,内存效率更高。

三、yield 的工作机制

理解yield的工作机制对于掌握生成器至关重要。当 Python 解释器遇到包含yield语句的函数时,它会将其特殊处理为一个生成器函数。调用生成器函数时,不会立即执行函数体,而是返回一个生成器对象。

生成器对象实现了迭代器协议,即包含__iter__()__next__()方法。每次调用next()函数或在 for 循环中迭代时,生成器函数会从上次暂停的位置继续执行,直到遇到下一个yield语句,此时yield后的表达式值会被返回给调用者,函数状态再次被冻结。

当函数执行完毕(或遇到 return 语句)时,生成器会抛出StopIteration异常,表示迭代结束。这个异常通常被 for 循环等迭代上下文自动处理。

四、yield 的常见使用场景

  1. 处理大型数据集:当需要处理的数据量太大而无法一次性装入内存时,生成器可以逐项产生数据,显著降低内存消耗。
def read_large_file(file_path):with open(file_path, 'r') as f:for line in f:yield line.strip()
  1. 生成无限序列:生成器可以表示无限序列,如斐波那契数列、素数序列等,因为值是按需生成的。
def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + b
  1. 实现管道:多个生成器可以串联起来形成处理管道,每个生成器负责特定的处理步骤。
def filter_even(numbers):for n in numbers:if n % 2 == 0:yield ndef square(numbers):for n in numbers:yield n ** 2# 使用管道
numbers = range(100)
result = square(filter_even(numbers))
  1. 协程和状态保持:生成器可以用于实现简单的协程,保持函数状态并在不同时间点进行交互。

五、yield 的高级用法

除了基本用法外,yield还有一些更高级的应用:

  1. yield from:Python 3.3 引入的yield from语法用于委托生成器,简化了生成器的嵌套使用。
def chain(*iterables):for it in iterables:yield from it
  1. 生成器表达式:类似于列表推导式,但使用圆括号,返回一个生成器对象。
gen = (x*x for x in range(10))  # 生成器表达式
  1. 双向通信:生成器可以通过send()方法接收数据,实现双向通信。
def accumulator():total = 0while True:value = yield totalif value is None:breaktotal += value

六、性能考量

使用生成器可以带来显著的性能优势,特别是在内存使用方面。由于生成器是惰性求值的,它们:

  1. 减少内存占用,不需要预先存储所有结果
  2. 可以立即开始产生第一个值,而不必等待所有计算完成
  3. 适用于流式数据处理和实时系统

然而,生成器也有一些限制:

  1. 生成器只能迭代一次,要重复使用需要重新创建生成器
  2. 无法随机访问,只能顺序访问
  3. 在某些情况下,如果所有数据确实需要同时存在,使用列表可能更直接

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

http://www.dtcms.com/wzjs/518592.html

相关文章:

  • 家政公司网站建设专业模板建站
  • 网站建设公司哪里找淘宝关键词排名优化技巧
  • 怎么给领导做网站分析搜索引擎优化的目标
  • 做婚恋交友网站模板温州seo优化
  • 个人博客html代码seo站内优化培训
  • 一个网站同时做竞价和seoebay欧洲站网址
  • 江门市专业做网站公司重庆网站排名推广
  • 品牌网官网商丘 峰少 seo博客
  • 国外 家具 网站模板长沙网站seo排名
  • 学校网站群建设方案安康地seo
  • 大专毕业设计网站灰色词排名推广
  • 什么网站做简历免费下载郑州网络营销顾问
  • 公司首页模板深圳网站seo推广
  • 玉林市城市建设投资有限公司网站2021全国大学生营销大赛
  • 自己怎么做百度网站空间谷歌竞价排名推广公司
  • 云浮网站网站建设seo的优化原理
  • 怎么制作一个简单的网站谷歌地图下载
  • 荣昌集团网站建设外贸网站推广
  • 深远互动 网站建设磁力链接搜索引擎2021
  • 外贸先做网站还是开公司搜索引擎查询
  • 建设购物网站需要多少钱看今天的新闻
  • 网站建设的行业客户个人网页免费域名注册入口
  • 简述电子政务系统网站建设的基本过程网络推广优化
  • 网站建设 网页2023年8月份新冠症状
  • 暴雪游戏排行榜前十名seo策略是什么意思
  • 山东外贸网站建设是什么seo策略什么意思
  • 安徽网站开发武汉疫情最新动态
  • 网站开发未按合同约定工期完工网站软文推广范文
  • 做图书网站赚钱吗产品seo是什么意思
  • 织梦dedecms大气微电影网站模板crm系统网站