当前位置: 首页 > news >正文

python生成器

一 python生成器

1 生成器的本质就是迭代器.(可迭代对象)
        生成器由生成器函数来创建或者通过生成器表达式来创建

def p():

  print("hello world !")

  yield

gen = p()  #  gen就是一个生成器,每次取p()都会是一个新的生成器

gen_other = p()   gen 和gen_other是两个生成器

 2. 生成器函数         生成器函数:在函数中return换成yield. 这个函数就是生成器函数        

def func():

  yield

gen = func() 函数并不会被执行, 而是创建一个生成器对象

取值:            

gen.__next__() 下一个            

gen.send() 可以给上一个yield传值, 第一次执行不能用send()

def func():

  a = None

  for i in range(50):

    print(i)

   a = yield (i,a)

gen = func()

print(gen.__next__())

print(gen.send("发票"))

>>>0

    (0, None )

  1

  (1, "发票")

 

 

  

 

特性:            

  1. 节省内存 (不获取执行结果是不执行,获取是按照yield的位置端点,可以避免数据过多是占用内存)           

  2. 惰性机制  (不主动获取是,不执行结果,用__next__()或者下一个yield之前的数据)          

  3. 只能向前(同一个生成器,执行按协定的顺序来,执行完毕之后不再重复执行)

3. 各种推导式
        1.列表推导式: [结果 for循环 if条件]

  li = [x for x in range(5)]

  print(li)

  >>>[0, 1, 2, 3, 4, 5]
        2.字典推导式: { key: value for循环 if条件}

  dic = {k:k+10 for k in range(3) }

  print(dic)

  >>>{0: 10, 1: 11, 2: 12, 3: 13}
        3.集合推导式: {key for循环 if条件}

  se = {x for x in ["a", "a", "b","c", "1", "2", "1"]}

  print(se)

  >>>{"a", "b", "c", "1", "2"}

4 生成器表达式

   (结果 for循环 if条件)

        惰性机制         记录在内存中的一段代码

  gen = (x for x in range(5))  #小括号中的它就是一个生成器表达式可以使用__next__(), 含有__iter__()

  gen.__next__()

  >>>0

  for i in gen :

  print(i)

  >>> 1

    2    

    3  

    4  

 

 

for E

1---------

# def func():
#     for i in range(1, 10000):
#         yield "衣服%s" % i
#
# gen = func()
# for i in range(50):
#     yf = gen.__next__()
# for i in range(50):
#     yf = gen.__next__()
# for i in range(50):
#     yf = gen.__next__()

 2-----------

def func():
    yield "麻花藤"
    yield "李彦宏"
    yield "马云"
    yield "刘强东"

gen = func()
# print(gen.__next__()) # 麻花藤
# print(gen.__next__()) # 麻花藤
# print(gen.__next__()) # 麻花藤
# print(gen.__next__()) # 麻花藤

# 生成器的本质是迭代器.
# print("__iter__" in dir(gen))
#
# # 生成器可以直接使用for循环
# # for el in gen:
# #     print(el)
#
# lst = list(gen) # 把生成器中的每一个数据拿出来组合成一个列表
# print(lst)

 3 -----

def add(a, b):
    return a + b

# 生成器函数, 0-3
def test():
    for r_i in range(4):
        yield r_i

# 获取到生成器
g = test() # 惰性机制

for n in [2, 10]:
    g = (add(n, i) for i in g)  # 循环的内部也是一个生成器

#  __next__()
# list()

print(list(g)) # 刚开始拿数据
# 生成器记录的是代码

 

转载于:https://www.cnblogs.com/tcpblog/p/9671001.html

相关文章:

  • 日志分析logstash插件介绍
  • 几句话了解Zookeeper工作原理
  • linux中辅助的一些命令
  • 大数据技术ZooKeeper应用——解决分布式系统单点故障
  • Ionic APP 热更新 之 产品发布状态下的热更新搭建,去local-dev-addon插件
  • 如何设计一个微型分布式架构?
  • [20171101]rman to destination.txt
  • java实现信息脱敏
  • Mozilla 官方博客:Firebug的寿命即将结束
  • 在Visual Studio中使用GitHub(使用篇)
  • 蜂巢科技融资6200万元,打响工业无人机平台争夺战
  • Python全栈 Web(Flask框架、变量、模板)
  • 日本RHP2机器人不仅摔倒后能自行站起来 ,还能协助人类救灾
  • SimplifyDb java快捷操作数据库发布啦
  • PHP7中我们应该学习会用的新特性
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • C语言笔记(第一章:C语言编程)
  • in typeof instanceof ===这些运算符有什么作用
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java8-模拟hadoop
  • javascript数组去重/查找/插入/删除
  • PHP CLI应用的调试原理
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 大型网站性能监测、分析与优化常见问题QA
  • 代理模式
  • 搞机器学习要哪些技能
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于web的全景—— Pannellum小试
  • 类orAPI - 收藏集 - 掘金
  • 聊聊flink的BlobWriter
  • 人脸识别最新开发经验demo
  • 如何合理的规划jvm性能调优
  • 十年未变!安全,谁之责?(下)
  • 学习HTTP相关知识笔记
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 我们雇佣了一只大猴子...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​ssh免密码登录设置及问题总结
  • ​油烟净化器电源安全,保障健康餐饮生活
  • "无招胜有招"nbsp;史上最全的互…
  • # .NET Framework中使用命名管道进行进程间通信
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • ###C语言程序设计-----C语言学习(3)#
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (未解决)macOS matplotlib 中文是方框
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)基于IDEA的JAVA基础1
  • (转载)从 Java 代码到 Java 堆
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选