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

个人免费网站开发青岛网站建设公司排名

个人免费网站开发,青岛网站建设公司排名,无人在线观看免费高清电视剧,东莞有什么做网站的公司1、什么是yield关键字 yield 是 Python 中的一个关键字,它用于定义生成器函数。生成器是一种特殊的迭代器,它可以在遍历过程中逐步产生值,而不是一次性生成所有值并将其存储在内存中。这使得生成器非常适合处理大量数据或无限序列&#xff0…

1、什么是yield关键字

yield 是 Python 中的一个关键字,它用于定义生成器函数。生成器是一种特殊的迭代器,它可以在遍历过程中逐步产生值,而不是一次性生成所有值并将其存储在内存中。这使得生成器非常适合处理大量数据或无限序列,因为它们只在需要时才生成下一个值,从而节省了内存。

当你在一个函数中使用 yield 语句时,这个函数就变成了一个生成器函数。调用生成器函数并不会立即执行其中的代码,而是返回一个生成器对象。当对这个生成器对象进行迭代(例如通过 for 循环或者调用 next() 函数)时,生成器函数会从上次暂停的地方继续执行,直到遇到下一个 yield 语句,然后返回当前的值,并再次暂停等待下一次迭代。

eg:斐波那契函数

def fibonacci(n):a, b = 0, 1for _ in range(n):yield aa, b = b, a + b# 使用生成器
for num in fibonacci(10):print(num)

在这个例子中,fibonacci 是一个生成器函数,它会生成前 n 个斐波那契数。每次迭代都会计算下一个斐波那契数,并通过 yield 返回该数值,而不占用额外的内存空间来存储整个序列。

2、使用方法

1、yield 单独使用

在这种情况下,yield 不返回任何值(实际上它会返回 None)。这种方式通常用于创建一个简单的迭代器,当只需要控制流而不需要传递具体值时。

def simple_generator():yieldprint("After first yield")yieldprint("After second yield")gen = simple_generator()
next(gen)  # 代码运行到第一个yield后停止,没有打印任何内容
next(gen)  # 代码从第一个打印语句开始执行,然后遇到yield停止运行,打印第一个打印语句
next(gen)  # 代码从第二个执行语句开始执行,打印第二个语句,但是没有了yield,报停止迭代异常

2、基本用法:返回值并暂停执行

这是最基础的用法,yield 可以用来代替 return 返回一个值给调用者,但是不会终止函数的执行。相反,它会保存函数的状态,并且可以在下次迭代时从中断的地方继续执行。

def simple_generator():yield 1yield 2yield 3if __name__ == '__main__':a = simple_generator()print(a.__next__())print(a.__next__())print(a.__next__())

依次打印1,2,3,每次调用生成一个值

如果调用的次数超过可迭代的次数,比如上述代码,再次调用

print(a.__next__()),会报StopIteration错误

3、yield 前边使用一个变量接收

yield 表达式可以出现在赋值语句的右侧,允许从外部向生成器发送数据。这通过 .send() 方法实现,发送的数据将作为 yield 表达式的结果被接收到。

def echo():while True:received = yieldprint(f"Received: {received}")e = echo()
next(e)  # 必须先启动生成器
e.send('hello')  # 输出:Received: hello
e.send('world')  # 输出:Received: world

next(e),代码运行到yield这行后停止运行,然后调用send方法

相当于给received 赋值,然后执行打印语句,然后又执行到yiel语句停止

再次调用send方法,仍然是这样继续操作

在这个例子中,received 变量接收了从外部发送进来的值,并打印出来。需要注意的是,在第一次调用 .send() 方法之前,必须至少调用一次 next() 来启动生成器。

4、yield from

`yield from` 是 Python 中用于简化从子生成器中提取值的过程的一种语法。它使得你可以更方便地将一个生成器委托给另一个生成器,从而创建更复杂的迭代模式。使用 `yield from` 可以减少代码量,并且使代码更加清晰易读。

`yield from` 的基本含义

当你在一个生成器函数中使用 `yield from <iterable>` 时,Python 会自动迭代 `<iterable>`,并且对于每一个产生的值都会执行一次 `yield`。这相当于在每次迭代时都调用 `yield` 来返回当前的值给外部调用者。此外,`yield from` 还可以处理异常和发送值给子生成器,这对于实现协程非常有用。

使用场景

1. **简化嵌套循环**
2. **委派到子生成器**
3. **处理异常**
4. **发送值给子生成器**

示例说明

简化嵌套循环

假设你有一个包含多个列表的列表,你想一次性迭代所有元素:```python

def flatten(nested_list):for sublist in nested_list:for item in sublist:yield item# 使用 yield from 简化上面的代码
def flatten_with_yield_from(nested_list):for sublist in nested_list:yield from sublistnested = [[1, 2, 3], [4, 5], [6]]
for num in flatten_with_yield_from(nested):print(num)

委派到子生成器

如果你有一个复杂的迭代逻辑,可以将其拆分成几个子生成器,然后通过 `yield from` 将它们连接起来:

def generator_one():yield 'one'yield 'two'def generator_two():yield 'three'yield 'four'def combined_generator():yield from generator_one()yield from generator_two()for value in combined_generator():print(value)

输出将是:
```
one
two
three
four
```

 处理异常

`yield from` 也可以传递异常给子生成器:

def subgen():try:while True:x = yieldprint(f"Received: {x}")except GeneratorExit:print("Sub-generator is closing")def delegator():yield from subgen()g = delegator()
next(g)  # 启动生成器
g.send('hello')
g.close()  # 关闭生成器,触发 GeneratorExit 异常

发送值给子生成器

除了传递异常,`yield from` 还可以让主生成器向子生成器发送值:```python

def subgen():while True:x = yieldprint(f"Sub-generator received: {x}")def delegator():sg = subgen()next(sg)  # 启动子生成器yield from sgg = delegator()
next(g)  # 启动主生成器
g.send('hello')  # 发送值给子生成器

关键区别

  1. 层次结构

    • yield 通常用于定义单层生成器逻辑。
    • yield from 用于委派到子生成器,可以简化多层迭代逻辑。
  2. 代码简化

    • 使用 yield 时,如果需要遍历一个可迭代对象,你必须显式地写出循环来逐一 yield 每个元素。
    • yield from 自动完成这一过程,使得代码更加简洁明了。
  3. 双向通信

    • yield 只能直接与调用者交互。
    • yield from 支持主生成器与子生成器之间的双向通信,包括发送值和抛出异常。
  4. 异常处理

    • yield 需要在主生成器中手动处理异常。
    • yield from 自动处理并传播异常给子生成器,允许更复杂的错误管理。

http://www.yidumall.com/news/81794.html

相关文章:

  • 刚做的网站 为啥搜不到怎样免费制作网页
  • 深圳南山做网站青岛网站排名提升
  • 太原疫情谷歌优化教程
  • 网站建设排名优化公司seo监控系统
  • 自己做的网站打不开是什么原因网络营销案例分析ppt
  • 石家庄大型网站建站郑州网站seo服务
  • 公司做网站哪家好网络营销网站
  • 免费的招标网有哪些it菜鸡网seo
  • 做目的旅游网站的上海网络营销上海网络推广
  • 网站响应式设计邯郸百度推广公司
  • 本地免费发布信息网站登封搜索引擎优化
  • 做网站免费的域名免费建立个人网站官网
  • php搭建网站后台附近学电脑培训班
  • 怎样做网站首页图片变换外贸全网营销推广
  • 免费设计商标的网站4001688688人工服务
  • 网站搭建配置成都网站seo收费标准
  • 北京网站优化校学费淘宝指数官网
  • wordpress 微信 插件整站排名优化公司
  • 重庆网站建设首选承越网络营销是以什么为基础
  • 小萝做h视频网站3天引流800个人技巧
  • 营销策划公司经营范围包括哪些宁波seo教程app推广
  • 自己做网赌网站b站2023年免费入口
  • 网站建设项目背景百度怎么推广自己的视频
  • 汽车之家网页首页seo外链平台热狗
  • 互联网建站google关键词seo
  • 校园网站的意义什么是软文文案
  • 免费可商用网站百度站长平台链接
  • 对网站建设的描述成人短期就业培训班
  • 一起做网店网站打不开站长网站查询工具
  • drupal joomla wordpress 带后台管理最新seo视频教程