python基础---生成器

生成器

这个老师的课
这个老师的网页

获取系列有规律但是个数不确定的数据

使用迭代器的时候可以使用一个不会产生异常的迭代器, 实际记录的是生成的数据的方式, 不是实际的数据

使用迭代器的时候这一个规则的改变不方便, 需要加一个专门的方法

还有就是如果需要大量的数据, 而实际使用的时候只用其中一部分, 会浪费大量的空间

生成器是一个记录生成数据的方式, 而不是实际的数据的方式, 实际是一个特殊的迭代器

实际定义

方法一

只需要把一个列表的生成[]改为()

nums = [x for x in range(5)]
nums2 = (x for x in range(5))

print(type(nums))
print(type(nums2))

print(nums)
print(nums2)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
<class 'list'>
<class 'generator'>
[0, 1, 2, 3, 4]
<generator object <genexpr> at 0x000002431C7B2110>

方法二

有时候这一个推导比较复杂, 不能使用for循环实现

这时候可以使用一个函数生成一个生成器

这一个函数返回的时候使用的不是return, 而是使用yeild, 下一次调用的时候会从yeild返回的位置

def fib_generator():
    num1 = 1
    num2 = 1
    while True:
        temp_num = num1
        num1, num2 = num2, num1 + num2
        yield temp_num

这个代码块的返回值是一个生成器, 这一个生成器第一次执行会从def开始直到yield, 调用next的时候会返回yield后面的数值

fib = fib_generator()

print(fib)
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
<generator object fib_generator at 0x000002342F7D2110>
1
1
2
3
5

这一个迭代器执行结束的时候会产生一个异常StopIteration, 如果是使用一个return, 返回的值会成为这一个异常的参数, 可以使用try语句进行捕获

def fib_generator():
    num1 = 1
    num2 = 2

    temp_num = num1
    num1, num2 = num2, num1 + num2
    yield temp_num

    temp_num = num1
    num1, num2 = num2, num1 + num2
    yield temp_num

    temp_num = num1
    num1, num2 = num2, num1 + num2
    yield temp_num
    return "结束了!!!"

fib = fib_generator()

print(next(fib))
print(next(fib))
print(next(fib))
try:
    print(next(fib))
except StopIteration as ret:
    print(ret.value)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
1
2
3
结束了!!!

send唤醒

除了使用next还可以使用send发送一个数据给迭代器

def fib_generator():
    num1 = 1
    num2 = 2

    temp_num = num1
    num1, num2 = num2, num1 + num2
    num = yield temp_num
    print("get ", num)

    temp_num = num1
    num1, num2 = num2, num1 + num2
    num = yield temp_num
    print("get ", num)

    temp_num = num1
    num1, num2 = num2, num1 + num2
    num = yield temp_num
    print("get ", num)
    return "结束了!!!"

fib = fib_generator()

print(fib.send(None))
print(fib.send(2))
print(fib.send(3))
try:
    print(fib.send(4))
except StopIteration as ret:
    print(ret.value)
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
1
get  2
2
get  3
3
get  4
结束了!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pip install 过程中报错:Microsoft Visual C++ 14.0 is required.

这是因为电脑中缺少这个组件导致的,我们将这个组件安装上即可解决问题。 安装报错关键信息:Microsoft Visual C++ 14.0 is required. 目录 一、下载组件 二、 安装步骤 一、下载组件 阿里网盘:VisualStudioSetup.exe:

Python生成文学编程风格文档库之pycco使用详解

概要 Pycco是一个Python库,用于生成文学编程风格的文档。它受到了Docco(一个快速生成源代码文档的工具)的启发,并通过解析源代码旁边的注释来创建一个美观的文档页面,使代码的解释与代码本身并排显示。 安装 安装Pycco非常简单,可以通过Python的包管理器pip进行安装: …

栈和队列的定义和实现

栈和队列 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 **称为栈顶&#xff0c;另一端称为栈底。**栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#…

如何应对Android面试官 -> PKMS 权限管理

前言 本章我们继续上一章节&#xff0c;讲解 PKMS 相关知识点&#xff1b; 静默安装 静默安装说的就是&#xff1a;在用户无感知的情况下&#xff0c;给用户的手机安装了某个 app&#xff0c;或者是用户触发安装之后&#xff0c;不需要额外的任何操作即可以安装目标 app 到手机…

【JavaWeb】网上蛋糕项目商城-注册,登录,修改用户信息,提交订单

概念 通过以上多篇文章的讲解&#xff0c;对该项目的功能已经实现了很多&#xff0c;本文将对该项目的用户注册&#xff0c;登录&#xff0c;修改用户信息&#xff0c;以及用户添加至购物车的商品进行提交订单等功能的实现。 注册功能实现 点击head.jsp头部页面的注册按钮&a…

最新贷款市场报价利率(LPR)数据(1991-2024)

数据来源&#xff1a;东方财富网时间跨度&#xff1a;1991-2024年 数据范围&#xff1a;全国范围 数据指标&#xff1a; LPR_1Y利率(%) LPR_5Y利率(%) 中长期贷款利率:5年以上(%) 短期贷款利率:6个月至1年(含)(%) 日期 样例数据&#xff1a; 下载链接&#xff1a; ht…

win10 截图黑屏解决方法

win10 使用QQ截图等第三方工具截图黑屏&#xff0c;提示 Capturing screen is forbidden! 此时winshiftS截图也无法正常工作&#xff0c;解决方法如下&#xff1a; 参考地址&#xff1a;Redirecting

AHB---数据总线

1. 数据总线 为了实现AHB系统&#xff0c;需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位&#xff0c;但这可以根据数据总线宽度进行更改。 数据总线包含以下部分&#xff1a; HWDATAHRDATAEndianness&#xff08;字节序&#xff09; 1.1 HWDATA 在写传输…

MinimogWP WordPress 主题下载——优雅至上,功能无限

无论你是个人博客写手、创意工作者还是企业站点的管理员&#xff0c;MinimogWP 都将成为你在 WordPress 平台上的理想之选。以其优雅、灵活和功能丰富而闻名&#xff0c;MinimogWP 不仅提供了令人惊叹的外观&#xff0c;还为你的网站带来了无限的创作和定制可能性。 无与伦比的…

投资者悄然收购二手楼梯楼,在杭州豪掷巨资购买12套!

独家首发 -------------- 日前杭州中介流传&#xff0c;一名投资客大举收购二手楼梯楼&#xff0c;下手就是12套&#xff0c;显示出一些具有前瞻性眼光的投资者悄悄放弃电梯楼&#xff0c;选择了处于价格洼地的楼梯楼。 二手楼梯楼当下被严重低估&#xff0c;在一线城市的二手楼…

Tmux工具使用案例

Tmux工具使用案例 连接linux一般使用ssh&#xff0c;当ssh会话中需要长时间执行命令时&#xff0c;为了避免命令不受ssh会话影响&#xff0c;除了可以将命令通过nohup <cmd> &等方法放到后台执行外&#xff0c;也可以利用Tmux这个工具解绑SSH会话与执行命令&#xff…

Raft共识算法图二解释

下面是有关Raft协议中不同术语和概念的翻译及解释&#xff1a; 术语和概念&#xff1a; 任期号&#xff08;term number&#xff09;&#xff1a;用来区分不同的leader。前一个日志槽位的信息&#xff08;prelogIndex&#xff09;&#xff1a;这是前一个日志条目的索引&#…

关于二手车系统学习--登录模块

1.样式1-17行 <div class"cheader"><div style"width: 80%;margin: 0 auto;line-height: 50px;padding-top: 10px"><el-row><el-col:span"5"style"font-size: 20px;cursor: pointer;color: #00ae66;font-weight: bold…

苹果自研大语言模型“Ajax“ 助力iOS 18升级;Stack Overflow与OpenAI建立API合作伙伴关系

&#x1f989; AI新闻 &#x1f680; 苹果自研大语言模型"Ajax" 助力iOS 18升级 摘要&#xff1a;苹果公司预计通过自研大语言模型Ajax来为iOS 18和Siri带来重大升级&#xff0c;但不计划推出类似ChatGPT的AI聊天机器人。Ajax模型基于Google的Jax框架&#xff0c;并…

Android:弹出对话框方式梳理一览(一)

Android&#xff1a;弹出对话框方式梳理一览&#xff08;一&#xff09; Guide&#xff5c;导言 在Android开发中&#xff0c;对话框可能是我们与用户交互的非常常用的方式&#xff0c;包括弹出一个小界面&#xff0c;可能在实际场景中都非常实用。本篇文章主要就是对Android弹…

搭建Docker私有镜像仓库

大家好&#xff0c;今天给大家分享一下如何搭建私有镜像仓库&#xff0c;私有镜像仓库可以更好地管理和控制镜像的访问和使用&#xff0c;确保只有授权的人员能够获取和使用特定的镜像&#xff0c;而且方便团队内部共享定制化的镜像&#xff0c;提高开发和部署效率&#xff0c;…

MySQL 中的HASH详解

MySQL中的哈希索引&#xff08;Hash Index&#xff09;是一种特殊的数据库索引类型&#xff0c;它利用哈希表&#xff08;Hash Table&#xff09;的数据结构来存储索引项。哈希表通过哈希函数&#xff08;Hash Function&#xff09;将索引列的值转化为一个固定长度的哈希码&…

【目录】500 行或更少(500 Lines or Less)

AOSA 500 行或更少&#xff08;500 Lines or Less&#xff09;是《开源应用程序体系结构》(Architecture of Open Source Applications, AOSA)系列的第四卷。该系列的前三卷是关于大型程序必须解决的大问题&#xff0c;而本书专注于程序员在构建新事物时在小规模中做出的设计决…

数据结构链表

数据结构链表 链表 1&#xff09;链表的概念及结构: 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 2&#xff09;实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 单向、双向…

SAP PP模块学习提炼第一部分

SAP是ERP的一款软件。 SAP的入门困难&#xff1a; 听不懂&#xff0c;看不懂缺乏知识体系缺乏行业经验 SAP入门引导&#xff1a; 导师引导实战演练 SAP基础介绍 1.什么是SAP? System, Application and Products in Data Processing 即数据处理的系统、应用和产品。 2.…
最新文章