python生成器原理

server/2024/9/22 20:35:16/

#2-使用生成器生成斐波那契数列(无限序列)

def fibonacci():

  a, b = 0, 1

  while True:

    yield a

    a, b = b, a + b

gen = fibonacci()

  for _ in range(10):

    print(next(gen),end=',') #第一次next后,执行fibonacci函数,到yield a处停止,并把a值返回,执行print(next(gen)),把a值给打印出来;第二次next后,则从停止出先执行完剩余的a, b = b, a + b,然后执行yield后停止。

def simple_generator():

  value = None

  while True:

    received_value = (yield value)

# 如果 send() 第一次被调用或者传入了 None,则 received_value 为 None

    if received_value is not None:

     value = received_value * 2 # 对接收到的值进行处理

# 创建一个生成器对象

gen = simple_generator()

# 启动生成器,获取第一个 yield 的返回值(默认为 None)

first_value = next(gen) # first_value 是 None

print(first_value) # 输出:None,因为上一个 yield 表达式返回了 None

# 使用 send() 方法发送一个值

response = gen.send(5) # 这里,5 将会被赋值给上一个 yield 表达式,并将 5 * 2 赋值给 value

print(response) # 输出:10,因为这次 send(5) 后,生成器内部将 5 * 2 赋值给 value

# 继续发送另一个值

response = gen.send(10)

print(response) # 输出:20,因为这次 send(10) 后,生成器内部将 10 * 2 返回给了 response

#第一次next直行道yield a处停止,开辟出received_value作为后续send传入的值的存放位置;当用send传入值后,把send值放入received_value,然和执行后面的if语句,然后到yield处停止,再开辟出received_value空间,等待下一个传入值。value是输出的值。

def gen_func():

    for x in range(2, 10, 2):

       yield x    #暂停执行for循环,并返回x的值,下一步执行 print(i)打印出x的值。

gen_list=gen_func()

    for i in gen_list:

       print(i)


http://www.ppmy.cn/server/118367.html

相关文章

【笔记】时间复杂度

文章目录 时间复杂度概念常见的时间复杂度时间复杂度的衡量常数时间例子线性时间例子平方时间例子对数时间例子 时间复杂度概念 时间复杂度:衡量算法随着输入量增长,执行时间的增长速度。 一般来说,肯定是希望时间复杂度小点比较好。 常见…

Cesium 问题:视角漫游时添加的无人机模型飞行时有抖动

文章目录 问题分析1. 调整飞机模型的高度,比如漫游视角飞行时是1500米,那么可以试着设置飞机模型的高度是1000米或300米,就不会看到抖动了2. 在给飞机新坐标时用如下方式问题 Cesium 问题:视角漫游时添加的无人机模型飞行时有抖动,飞行不太流畅 分析 不太平滑飞行有这两…

使用docker的小例子

演示一个简单的 Node.js 应用的 Docker 化过程。假设我们要创建一个简单的 Node.js 应用,它会在启动时输出 “Hello, Docker!”。 1. 创建 Node.js 项目 步骤 1: 创建项目目录和文件 mkdir my-node-app cd my-node-app 步骤 2: 初始化 Node.js 项目 npm init …

【重学 MySQL】二十七、七种 join 连接

【重学 MySQL】二十七、七种 join 连接 union 的使用UNION 的基本用法示例UNION ALL 的用法 七种 join 连接代码实现语法格式小结 union 的使用 UNION 在 SQL 中用于合并两个或多个 SELECT 语句的结果集,并默认去除重复的行。如果希望包含重复行,可以使…

MySQL——数据类型(二)

目录 一、日期与时间类型 1.1 date 1.2 datetime 1.3 timestamp 二、枚举和联合 2.1 enum 2.2 set 2.2.1 set 的插入 2.2.2 set 的查找 思维导图可以参考如下链接: 数据类型.xmind 夜夜亮晶晶/MySQL - Gitee.com 一、日期与时间类型 1.1 date 日期 yyy…

HTTP 协议的基本格式

HTTP协议("超文本传输协议"),是一个被广泛使用应用层协议,自1991年正式发布HTTP协议以来,HTTP协议就一直在更新,目前已经更新到3.0版本,但是目前主流的依旧是1.1版本,但依旧是一个最主流使用的应…

用Blender来烘培模型材质

通常我们在做三维设计,游戏开发的时候,经常需要从网上下载一些3D模型,这些模型采用的材质分辨率通常都不一样,而我们从性能考虑,需要对材质进行统一的处理,例如把材质都统一为2K的分辨率。 我们可以在Blen…

React两种路由模式的实现原理

React 中常用的两种路由模式是 HashRouter 和 BrowserRouter。它们分别使用不同的方式来管理和监听 URL 变化。以下是这两种路由模式的实现原理。 1. HashRouter HashRouter 使用 URL 的哈希部分(即 # 后面的部分)来保持 UI 和 URL 的同步。哈希部分不…