python生成器的实现及原理

2023-11-04

"""
1、迭代
一个接一个读取列表中的值,这个过程叫迭代
"""

# 案例
mylist1=[1,2,3]
for v in mylist1:
    print(v,end=" ")
print()


mylist2=[x*x for x in range(5)]
for v in mylist2:
    print(v,end=" ")

"""
2、生成器
python Generator
解决了资源消耗问题,用一个值,产生一个值,用完就扔。
"""

# 创建一个生成器
data_generator=(x*x for x in range(5))#圆括号打印出来是生成器,中括号打印出来是列表
print(data_generator)#此处打印出来类型是个生成器
for v in data_generator:
    print(v,end="")
print()
print("第二次对生成器进行迭代")
for v in data_generator:
    print(v,end="")
    #这里就什么都没有,因为在第一次迭代的时候就用完了,之后就扔掉了

"""
3、yield
他跟return很像,yied是暂时挂起,之后运行的时候直接从yield这里往下运行
"""
# 案例
# 输出不大于max的所有偶数
def generator_even(max):
    for i in range(0,max+1):
        if i % 2 ==0:
            yield i
'''
yield与return类似
retuen expression   直接退出函数(方法),并返回expression的值
yield也返回值,但是返回的是一个generator,generator当前的值就是yield后面跟的表达式的值
'''
print(generator_even(10))#同样这里产生一个生成器

even_generator=generator_even(10)
for n in even_generator:
    print(n,end=' ')

'''
每一个generator对象都有一个隐含的方法__next__,该方法的返回值就是yield后面表达式的值
当__next__方法调用次数超过迭代次数,会抛出StopIteration异常,所以应该使用try。。。except捕获该异常
'''
print()
even_generator=generator_even(10)
print(even_generator.__next__())#0
print(even_generator.__next__())#2
print(even_generator.__next__())#4
print(even_generator.__next__())#6
print(even_generator.__next__())#8
print(even_generator.__next__())#10
# print(even_generator.__next__())#直接抛出异常
#当调用次数比迭代次数多的时候会直接抛出异常

'''
4、用普通函数模拟生成器函数的效果
'''
#将生成器变成普通的列表
def generator_even(max):
    event=[]
    for i in range(0,max+1):
        if i % 2 ==0:
            event.append(i)
    return event
print()
for v in generator_even(20):
    print(v,end="")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python生成器的实现及原理 的相关文章

随机推荐

  • VTK交互器

    VTK交互器定义了用户了与VtkWidget界面的交互方式 结构图如下 交互器类名 功能 vtkInteractorStyle 一个实现大部分动作的基类 对交互只有接口 没有实际功能 vtkInteractorStyle3D 允许用户交互
  • 阿里云ECS服务器Linux第一次登录 提示Login Incorrect的解决方法

    问题情景 1 第一次购买ECS服务器 2 没有设置过系统root账户的Login密码 不是连接远程时提示需要输入的那个6位纯数字密码哈 3 在阿里云控制台中启动 远程连接 4 输入6位纯数字密码 首次连接会提示密码 后面不再提示 需要记下来
  • 小白就懂的IDEA中将本地的Jar包导入到Springboot(含若依)中

    在项目开发的过程中 难免会遇到在Springboot中无法通过pom中添加依赖使用maven下载需要的jar包 而本地PC端中我们拥有jar包 这时候该如何办呢 下面所采用的方法既不添加lib文件 就能搞定 1 打开IDEA开发软件 2 然
  • 『贪吃蛇』AI 算法简易实现(中秋特别版)

    前言 一年一度的中秋节就快到了 平台也有各种各样的中秋发文活动 正在翻阅时偶然间我看到了这篇文章 兔饼大作战 吃月饼 见月亮 还能咬自己 欢庆中秋特制版 掘金 juejin cn 大家肯定比较熟悉了 这个游戏的内核就是贪吃蛇 作者也是对玩法
  • G1理论基础与最佳实践

    文章目录 1 G1理论基础 1 1 G1介绍 1 2 YongGC 1 3 mixed gc 1 4 扩展 1 4 1 记忆集和卡表 1 4 2 STAB和TAMS 1 5 G1相比CMS的优势 2 G1日志解读与经验分享 2 1 日志解读
  • Win10专业版系统Docker安装、配置和使用详细教程

    一 win10专业版系统首先需要开启硬件虚拟化及Hyper V功能 才能进行Docker for Windows软件安装 如何开启硬件虚拟化 自行百度 可在任务栏中查看虚拟化是否开启 win10系统 打开控制面板 应用 程序和功能 开启Hy
  • postman——集合——执行集合——迭代运行集合

    网址 https learning getpostman com docs postman collection runs starting a collection run 开始收集运行 集合是一组请求 可以在对应的环境下作为一系列请求一
  • 前后端接口规范

    原文地址 https github com f2e journey treasure blob master api md 前后端接口规范 随着前后端分离越来越普遍 后端接口规范也就越来越重要了 一套良好的接口规范可以提升工作效率 减少沟通
  • Java-线程同步

    Java 线程同步 在Java中 我们通过同步机制 来解决线程的安全问题 实现线程安全的三种方法 1 同步代码块 synchronized 同步监视器 需要被同步的代码 说明 操作共享数据的代码 即为需要被同步的代码 gt 不能包含代码多了
  • 基于Python+Django的项目实战-信息安全领域中语义搜索引擎的设计与实现(附源码+论文)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 基于Python的毕业设计 精彩专栏推荐 微信小程序毕业设计 安卓app毕业设计 Java毕业设计 信息安全领域中语义搜索引擎的设计 django 演示 源码及论文下载地址
  • 前端复习HTML+CSS+JavaScript(必问面试题)

    前端复习 HTML 常见的几种图片格式以及他们之间的区别是什么 JPG 支持有损压缩 不支持透明 不支持动画 色彩还原度较好 PNG 不支持压缩 支持透明 半透明 不透明 不支持动画 GIF 支持有损压缩 不支持全透明 支持半透明 支持动画
  • Java 接入微信支付API V3 接口开发案例

    关于API v3 为了在保证支付安全的前提下 带给商户简单 一致且易用的开发体验 我们推出了全新的微信支付API v3 相较于之前的微信支付API 主要区别是 遵循统一的REST的设计风格 使用JSON作为数据交互的格式 不再使用XML 使
  • C02_02 Python笔记备份 变量

    author Liu Shao Ji encoding utf 8 字符串赋值到变量 再打变量打印出来 message Hello Python world print message 尝试在Hello world py中使用一个变量 在这
  • 如何在微信小程序中生成二维码:一个最简单的案例就让你明白

    使用weapp qrcode js 在 微信小程序 中 快速生成二维码 一 效果 二 具体步骤 代码 下载weapp qrcode代码 然后 将 dist 目录下的weapp qrcode esm js 复制到项目目录中 这里是utils目
  • 泰勒公式的展开细节解析(转载)

    转载自 https blog csdn net dog250 article details 76697167 上周写完了 三体 读后思考 泰勒展开 维度打击 黑暗森林 后收到一些邮件 进一步思考了关于泰勒展开的意义 也许我掌握的那些网络技
  • [4G&5G专题-5]:RRU 全面了解什么是4G+5G RF动态频谱共享?

    前言 建议在了解动态频谱DSS之前 前先了解 5G专题 4 RRU 全面了解什么是4G 5G RF静态射频共享 4G 5G专题 4 RRU 全面了解什么是4G 5G RF静态射频共享 文火冰糖的硅基工坊的博客 CSDN博客 rru设计原理与
  • 安卓在ecplise的问题

    Description Resource Path Location Type AndroidManifest xml file missing This is build issue Go to Menu in eclipse Proje
  • 【编程测试题】头条校招

    题目描述 头条的2017校招开始了 为了这次校招 我们组织了一个规模宏大的出题团队 每个出题人都出了一些有趣的题目 而我们现在想把这些题目组合成若干场考试出来 在选题之前 我们对题目进行了盲审 并定出了每道题的难度系统 一场考试包含3道开放
  • 用python实现简易控制台五子棋小游戏

    finish False 游戏是否结束 flagNum 1 当前下棋者标记 flagch 当前下棋者棋子 x 0 当前棋子的横坐标 y 0 当前棋子的纵坐标 print 033 1 37 41m 简易五子棋游戏 控制台版 033 0m 棋盘
  • python生成器的实现及原理

    1 迭代 一个接一个读取列表中的值 这个过程叫迭代 案例 mylist1 1 2 3 for v in mylist1 print v end print mylist2 x x for x in range 5 for v in myli