python生成器原理

news/2024/9/18 21:06:11 标签: python, 开发语言

#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.niftyadmin.cn/n/5664524.html

相关文章

Python编码系列—Python组合模式:构建灵活的对象组合

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

SHL笔试测评系统题库考什么?如何通过综合测评|附性格测试104道

嘿,各位求职小伙伴们!我是职小豚,今天就来带大家深入了解神秘又充满挑战的 SHL 笔试测评系统。 一、SHL 人才测评系统介绍 SHL 呀,那可是人才测评领域的超级大明星!就像一个智慧的魔法师,用各种神奇的题目…

Kubernetes从零到精通(12-Ingress、Gateway API)

Ingress和Gateway API都是Kubernetes中用于管理外部访问集群服务的机制,但它们有不同的设计理念和适用场景。它们的基本原理是通过配置规则,将来自外部的网络流量路由到Kubernetes集群内部的服务上。 Ingress/Gateway API和Service Ingress/Gateway API…

linux-网络管理-防火墙配置

Linux 网络管理:防火墙配置 1. 防火墙概述 防火墙是保护计算机系统和网络免受未经授权访问和网络攻击的安全机制。Linux 系统中,防火墙通过控制进入和离开网络的数据包,实现网络流量的过滤和管理。 Linux 上的防火墙配置工具有多种&#x…

【每日刷题】Day124

【每日刷题】Day124 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCR 079. 子集 - 力扣(LeetCode) 2. 1863. 找出所有子集的异或总和再求和 …

笔试强训day15

平方数 牛妹是一个喜欢完全平方数的女孩子。 牛妹每次看到一个数 x,都想求出离 x 最近的完全平方数 y。 每次手算太麻烦,所以牛妹希望你能写个程序帮她解决这个问题。 形式化地讲,你需要求出一个正整数 y,满足 y 可以表示成 a2a^…

Linux定时启动jar应用shell脚本分享

1、如何精确找到jar应用进程 # 以 dist-app-manage.jar 为例 [rootlocalhost dist-app-manage-8083]# ps -ef|grep dist-app-manage.jar root 5134 5033 0 21:24 pts/0 00:00:00 grep --colorauto dist-app-manage.jar root 21766 1 1 Sep02 ? …

window下idea中scala的配置

目录 Scala安装步骤: 1.下载scala安装包 2.配置环境变量: 3.检查scala是否安装成功: 4.idea安装scala插件 5.导入scala-sdk 6.新建scala文件 Scala安装步骤: 1.下载scala安装包 访问Scala官网:https://www.sca…