简单易懂的python生成器

目录

  • 定义
  • 使用 for 循环来迭代生成器对象
  • 斐波那契

定义

  • 在 Python 中,使用了 yield 的函数被称为生成器(generator)。
  • Python 中的生成器(Generator)是一种特殊的迭代器,可以通过函数来创建。
  • 与常规函数不同的是,生成器使用 yield 语句来产生一个值,并暂停函数的执行,保留当前的状态,以便下次从暂停的位置继续执行。

也就是说,生成器其实就是带yield的函数,而调用该函数时遇到yield的位置,该函数就返回yield返回的值,并且之后该函数会停在那个位置,直到下次调用。

使用 for 循环来迭代生成器对象

定义一个迭代器:

def count_up_to(n):for i in range(n):yield i

使用for循环进行迭代

# 使用生成器进行迭代
for num in count_up_to(5):print(num)

使用next迭代:

# 创建生成器对象
generator = count_up_to(6)
# 输出
print(next(generator))
print(next(generator))

斐波那契

利用yield每次返回后会保留函数内参数的特点,可以很好的解决递归问题:

def fibonacci(n):a, b, cnt = 0, 1, 0while True:if cnt > n:returnyield aa, b = b, a + bcnt += 1n = 5
f = fibonacci(n)
fib_lst = [next(f) for _ in range(5)]
print(fib_lst)

对比不使用yield的实现方法,普通方法(比如迭代方法)会一次性计算和存储所有的值,可能会占用更多的内存。

生成器的主要优势是节省内存,因为它们按需生成值,而不是一次性生成所有值。这使得它们非常适合处理大量数据或无限序列的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Feign忽略Https的SSL最佳方案(且保证负载均衡将失效)

同时解决Https的SSL证书验证问题和feign不支持Patch请求方法的问题 代码 1. 工具类 OkHttpUtils.java import javax.net.ssl.*; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import j…

从0开始搭建ns3环境以及NetAnim简单使用

一、环境准备 ns3是基于GNU/Linux平台使用C开发的工具软件,在windows系统中安装使用ns3环境,可以使用虚拟机VMware并安装ubuntu系统来实现,现将本教程所用到的虚拟机和系统镜像放到网盘提供下载 名称链接提取码VMware Workstation 17 Proht…

简约时尚的健康手表,智能守护每一刻,dido Y60上手

智能手表是现在很流行的一种智能设备,很多品牌都推出了各种各样的产品,但是大部分都更侧重功能和运动的方面,健康监测往往只是配角,而随着人们对自己的健康越来越重视,有些朋友只是单纯的需要一块专业的健康监测手表。…

选择任务管理软件:哪个更适合你的需求?

随着互联网的发展,知识管理是可以成为企业获得更大发展前景的神兵利器,任务协同,是服务于中小型团队,或者大型机构的终端组织。来看看这款国外流行的任务管理软件Zoho Projects。 任务管理是企业协同的重要组成部分。 任务管理是企…

Bitcoin 加速交易操作示例

这里以 Bitcoin Ordinals NFT 为例, 进行加速交易演示 第1步:新建子账户 温馨提示:如果有多条鱼未确认,也只需1个账户即可,不必搞多个子账户 第2步:切换回到老地址(Account 1) 第3步…

【Kubernetes】Kubernetes的PV和PVC的用法

PV、PVC 前言一、 存储卷1. emptyDir 存储卷1.1 概念1.2 实例 2. hostPath 存储卷2.1 概念2.2 实例 3. nfs共享存储卷 二、PV 和 PVC1. 概念1.1 PV1.2 PVC1.3 PVC 的使用逻辑1.4 创建机制1.5 PV 和 PVC 的生命力周期1.6 创建及销毁 PV 的流程 2. PV 和 PVC 的创建2.1 查看定义2…

高并发内存池项目(C++实战项目)

项目介绍 项目来源 本项目实现了一个高并发内存池,参考了Google的开源项目tcmalloc实现的简易版;其功能就是实现高效的多线程内存管理。由功能可知,高并发指的是高效的多线程,而内存池则是实现内存管理的。 tcmalloc源码 项目…

论智能与反智能的对立统一

智能和反智能可以被视为一个相对的概念,彼此存在一定的关联和互补。在发展智能和反智能技术的过程中,我们必须始终牢记伦理和法律的原则,在合法和道德的框架内进行研究和应用,遵守相关的规定和限制。只有在这样的前提下&#xff0…

linux的shell中 if 的运算符的使用

一、文件比较运算符 e filename 如果 filename存在,则为真 如: [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 如: [ -d /tmp/mydir ]-f filename 如果 filename为常规文件,则为真 如: […

基于vue开发的影视站模板(模仿西瓜视频)

基于vue3开发的影视站模板, 对接苹果cms10数据库表, 采用pythondjangovue开发 效果预览 http://101.43.124.118:8002 源码地址 https://github.com/geeeeeeeek/appvideo 运行步骤 1.安装依赖 npm install 2.运行 npm run dev 代码说明 入口文件为main.js 接口请求的bas…

【计算机网络】概述及数据链路层

每一层只依赖于下一层所提供的服务,使得各层之间相互独立、灵活性好,已于实现和维护,并能促进标准化工作。 应用层:通过应用进程间的交互完成特定的网络应用,HTTP、FTP、DNS,应用层交互的数据单元被称为报…

MySQL 中常见的几种高可用架构部署方案

MySQL 中的集群部署方案 前言 这里来聊聊,MySQL 中常用的部署方案。 MySQL Replication MySQL Replication 是官方提供的主从同步方案,用于将一个 MySQL 的实例同步到另一个实例中。Replication 为保证数据安全做了重要的保证,是目前运用…

数据结构初阶--二叉树的链式结构

目录 一.二叉树链式结构的概念 二.二叉树链式结构的功能实现 2.1.链式二叉树的定义 2.2.链式二叉树的构建 2.3.链式二叉树的遍历 2.3.1.先序遍历 2.3.2.中序遍历 2.3.3.后序遍历 2.3.4.层序遍历 2.4.链式二叉树的求二叉树的结点数量 法一:计数法 法二&a…

Linux知识点 -- 进程概念(补充)

Linux知识点 – 进程概念(补充) 文章目录 Linux知识点 -- 进程概念(补充)一、进程地址空间的堆区二、虚拟地址到物理地址之间的转化三、虚拟地址到物理地址之间的映射 一、进程地址空间的堆区 在用户每次使用malloc等函数在进程的…

OBD接口引脚定义

汽车的OBD接口引脚定义分配如下图所示,OBD接口共有16个引脚(可参考 ISO 15031-3)。 1、引脚1,3,8,9,11,12,13 引脚1,3,8,9,11,12,13由主机厂进行分配。 2、引脚2 如果车辆中使用SAE J1850 10,4 VPW(可变脉冲)来提供…

【React】精选10题

1.React Hooks带来了什么便利? React Hooks是React16.8版本中引入的新特性,它带来了许多便利。 更简单的状态管理 使用useState Hook可以在函数组件中方便地管理状态,避免了使用类组件时需要继承React.Component的繁琐操作。 避免使用类组件…

小红书运营 变现方法总结(精)

大家好,我是网媒智星,今天跟大家分享一下小红书运营方面的知识,怎样利用小红书变现?全篇倾情干货输出,认真学习,保证您收获多多。 首先,让我们来分析一下小红书平台的优势。关于卖东西&#xff…

Open3D (C++) 基于拟合高差的点云地面点提取

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示1、原始点云2、提取结果四、相关链接系列文章(连载中。。。): Open3D (C++) 基于高程的点云地面点提取Open3D (C++) 基于拟合平面的点云地面点提取Open3D (C++) 基于拟合高差的点云地面点提取</

vue + less 实现动态主题换肤功能

文章目录 前言一、前提条件1. 初始化vue项目2. 安装插件 二、新建文件夹主题theme1.style.less文件2.model.js文件3.theme.js文件theme文件夹最终效果 三、修改vue.config.js文件四、页面上的具体使用1. index.vue 页面2. index.vue 页面注意点说明3. index.vue 效果 五、在js中…

VSCode使用SSH无密码连接Ubuntu

VSCode使用SSH无密码连接Ubuntu 前提条件&#xff1a; 1. 能够正常使用vscode的Remote-ssh连接Ubuntu 2. Ubuntu配置静态ip&#xff08;否则经常需要修改Remote-ssh的配置文件里的IP&#xff09; 链接-> ubuntun 18.04设为静态ip&#xff08;.net模式&#xff0c;可连接…