python中的生成器(generator)

一、生成器

生成器是 Python 中非常有用的一种数据类型,它可以让你在 Python 中更加高效地处理大量数据。生成器可以让你一次生成一个值,而不是一次生成一个序列,这样可以节省内存并提高性能

二、实现generator的两种方式

python中的generator保存的是算法,真正需要计算出值的时候才会去往下计算出值。它是一种惰性计算(lazy evaluation)。

要创建一个generator有两种方式。

第一种方法:把一个列表生成式的[]改成(),就创建了一个generator

>>> L=[x * x for x in range(10)]
>>> L
[0,1,4,9,16,25,36,49,64,81]
>>> g = (x * x for x in range(10))#注意把[]改成()后,不是生成一个tuple,而是生成一个generator
>>> g
<generator object <genexpr> at 0x1022ef630>

第二种方式:在函数中使用yield关键字,函数就变成了一个generator

函数里有了yield后,执行到yield就会停住,当需要再往下算时才会再往下算。所以生成器函数即使是有无限循环也没关系,它需要算到多少就会算多少,不需要就不往下算。

# -*- coding: UTF-8 -*-def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + b# 使用生成器生成前 10 个斐波那契数列
fib = fibonacci()
for i in range(10):print(next(fib))

 

 

参考:

python中的生成器(generator)总结_python generator_Python 学习者的博客-CSDN博客

Python 生成器(generator)详细总结+示例_python generator_Jairoguo的博客-CSDN博客

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

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

相关文章

LeetCode·每日一题·2544. 交替数字和·模拟

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/alternating-digit-sum/solutions/2341276/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-7fjq/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获得授权&#…

QT使用同一按钮实现打开/关闭新窗口

QT使用同一按钮实现【打开/关闭】新窗口&#xff0c;实现方案如下&#xff1a; 使用一个全局状态变量记录窗口打开状态通过该状态实现新窗口的show和close 实现代码如下&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h" #include "…

C++ | 反向迭代器

目录 前言 一、基本框架 二、起始位置和结束位置 三、反向迭代器的自增与自减 四、反向迭代器的判断 五、list类的修改 六、单独设计反向迭代器类的意义 前言 反向迭代器实际上与我们前面的stack、queue、priority一样&#xff0c;都是适配器&#xff1b;我们可以通过正向…

信道编码---RS编码与译码原理

本文介绍了RS编码以及译码的原理。 本文的内容基本上都来自刘梦欣的《基于FPGA的RS编译码研究与设计》&#xff0c;大家可以通过知网找到这篇文章&#xff0c;链接在下面。对RS码的原理讲解非常清楚&#xff0c;如果要看的话可以结合第2和第3部分一起看更好懂。我的整理也是比较…

【采用有限元法技术计算固有频率和欧拉屈曲荷载】使用有限元法的柱子的固有频率和屈曲荷载(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Java----使用eureka进行注册连接(微服务简单实现)

当采用微服务架构时&#xff0c;各个业务流程被逐一分解&#xff0c;虽说是分解&#xff0c;但还是要进行连接的&#xff0c;最简单的就是使用http请求&#xff0c;将他们联系起来&#xff0c;通过给容器注入restTemplate&#xff0c;然后使用内置的方法进行请求&#xff0c;但…

抖音seo源码-源代码开发搭建-开源部署操作日志

一、开发者前言大环境概述 抖音seo源码开发是一项非常重要的技术&#xff0c;在抖音上&#xff0c;有很多视频&#xff0c;如果你想让自己的视频脱颖而出&#xff0c;那么就需要优化自己的seo源码。不过&#xff0c;为了保护用户的隐私&#xff0c;抖音并不公开其seo算法的细节…

Git的使用

初始化仓库 git init 查看仓库状态 git status 仓库的四种状态&#xff1a; Untracked&#xff08;未跟踪&#xff09;: 文件未被Git追踪&#xff0c;即Git对文件的版本控制尚未开始。这意味着文件还没有被添加到Git仓库中。Unmodified&#xff08;未修改&#xff09;: 文…

opencv图片根据规则改变颜色

解析 1. 读入图片 2.通道分离 3.像素值在【100&#xff0c;200】之间&#xff0c;赋值128。大于200赋值255&#xff0c;小于100赋值0。 源码 import cv2 img_raw_path"past/unet-test_result0-0-1-0.png" img_rawcv2.imread(img_raw_path) (r,g,b)cv2.split(img_…

【网络编程】Linux服务器程序规范相关内容

文章目录 1、日志1.1、syslog()函数 2、用户信息2.1、UID、EUID、GID、EGID 3、进程间关系3.1、进程组3.2、会话 4、服务器程序后台化&#xff08;守护进程&#xff09; 1、日志 Linux提供一个守护进程rsyslogd来处理系统日志&#xff0c;系统日志中包括用户进程产生的日志以及…

less预处理语言的运用之-变量拼接那点事

less语法的技巧总结&#xff0c;很基础&#xff0c;熟练掌握后能提高我们在大型项目中的开发效率 a:0.5; showdaw-px:100; mkcolor1:#6ec5ff; num:1; .outer{//拼接的字符串在变量后面&#xff0c;需要在冒号后面加~width:~"{showdaw-px}px";//拼接的字符串在冒号后…

Intellij IDEA突然无法启动问题

遇到的情况&#xff1a;Intellij IDEA 双击或者鼠标右键右键单击都无法启动&#xff0c;打开任务管理器也没有Intellij IDEA线程启动。 解决方法&#xff1a; 第一步&#xff1a;以管理员身份打开命令提示符&#xff0c;输入命令(“ netsh winsock reset ”)&#xff0c;关闭…