生成器函数可以简化迭代器的创建。在迭代器的基础上,只要在函数中使用 yield 语句来替代结果的输出,就变成了一个生成器函数。

生成器函数与普通函数最显著的不同就是它没有 return 语句,取而代之的是 yield 语句。

正常的函数在被调用后,会通过 return 语句返回一个值,然后结束。而生成器函数被调用后,返回的生成器类似于一个函数环境,每次迭代过程中执行到 yield 语句,就会返回一个值,然后挂起函数,等下一次迭代时再恢复函数的状态,继续执行其它语句,直到再次遇到 yield 语句时重复上述过程。

生成器表达式的基本用法

L = [1, 2, 3]
G = (x ** 2 for x in L)for i in G:print i
# 1
# 4
# 9

列表动态构建器(生成器就是构建器吧?)

# 常规构建器的做法
lix = [2*x + 1 for x in range(1, 101)]
# 执行结果:[1,3,5,7,9,11,13,15,17.....]
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 常规构建器可以直接构建生成
# 但是存在问题,如果一次构建的数据量太大,会严重占用内存
# 我们在使用该列表的时候,有可能只是使用前10项
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 使用列表动态构建器
lix = (2 * x - 1 for x in range(1, 101))
# 执行结果:print (lix) --> <generator object <genexpr> at 0x7f232e462048>
next(lix)
# 执行结果:1
next(lix)
# 执行结果:3
next(lix)
# 执行结果:5
next(lix)
# 执行结果:7
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 列表动态构建器
# 和构建器基本没有区别,创建的时候列表中是没有数据的
# 必须通过next()函数来获取列表中的下一条数据
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

参考文章:Python 高级编程之初识生成器

python 生成器表达式(构建器表达式)相关推荐

  1. python 生成器装饰器_对Python生成器、装饰器、递归的使用详解

    1.Python生成器表达式 1).Python生成器表达式 语法格式: (expr for iter_var in iterable) (expr for iter_var in iterable ...

  2. python kotlin_用Java和Python模仿Kotlin构建器

    python kotlin 介绍 Kotlin可能现在是我最喜欢的语言,可能它提供的最酷的功能之一是基于几个功能构建的类型安全的生成器(稍后解释). 我发现自己真的很想在其他两种主要语言(Java和P ...

  3. 用Java和Python模仿Kotlin构建器

    介绍 Kotlin可能现在是我最喜欢的语言,并且它可能提供的最酷的功能之一是基于几个功能构建的类型安全的生成器(稍后解释). 我发现自己真的很想在其他两种主要语言(Java和Python)中使用此功能 ...

  4. python生成器和装饰器_python之yield与装饰器

    防伪码:忘情公子著 python中的yield: 在之前发布的<python之列表解析与生成器>中我们有提到过,生成器所实现的是跟列表解析近似的效果,但是我们不能对生成器做一些属于列表解析 ...

  5. python生成器和装饰器_python三大法器:生成器、装饰器、迭代器

    迭代器 迭代的概念 使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表获取值的过程 使用for循环遍历取值的对象叫做可迭代对象, 比如:列表.元组.字典.集合.range.字符串 判断 ...

  6. 波兰表达式 构建 表达式树

    这里提供一种将波兰表达式构建成表达式树的一种方法. 二叉树的节点有三个成员:数值(或者操作符)type,左节点lnode(被操作数),右节点rnode(操作数) //借助栈将波兰表达式 构建 表达式树 ...

  7. ssis 表达式任务_SSIS表达式任务与将变量作为表达式求值

    ssis 表达式任务 In this article, I will first give an introduction about SSIS expressions, then I will de ...

  8. python生成器 内存_python生成器

    一,生成器 1,生成器就是迭代器 2有两种方式写生成器 1),生成器函数 def gen(): print("我是一个函数") return "娃哈哈" # 返 ...

  9. python中raise stoplteration_推导表达式迭代器生成器模块和包 | 编程电脑技术交流...

    魔法方法需要特定的条件去触发 有next是迭代器 # li = [] # for i in range(1,10): # li.append(i) # print(li) # ------------ ...

最新文章

  1. C#中的空值的判断(转)
  2. 行为类模式(八):状态(State)
  3. 会计的疑惑--BigDecimal的秘密
  4. RocketMQ消息轨迹-设计篇
  5. linux中时间命令详解
  6. java 捕获运行时异常_java-如何通过ASM在字节码中捕获运行时异常
  7. 熵编码之哈夫曼树(五)
  8. 应用安全-软件安全-漏洞修复整理
  9. 线性代数学习点(五):向量运算规则的几何表示
  10. 产品能力|书山有路-趣味算法(第二版)读书笔记part1
  11. Java求100内 奇数 和 偶数 的和
  12. dreamweaver cs6 mac 破解版
  13. RN cannot add a child that doesnot have a YogoNode to a parent without a measure function!
  14. Opencv4android 眼睛追踪
  15. ZigBee智能仓库监控系统
  16. mysql serial 类型_Mysql自增类型serial
  17. ipconfig使用方法完整版
  18. Codeforces Round#768(Div.2)A-F
  19. htcm7刷linux,htc one m7刷官方原版recovery的教程
  20. 郑大跨专业考研计算机,多所985/211大学计算机考研禁止跨考!新乡寄宿考研

热门文章

  1. float32精度_混合精度对模型训练和推理的影响
  2. SAP云采购解决方案入华在即
  3. Infopath提示表单已经存在,怎么破?
  4. 单位银行结算账户如何变更
  5. ALV分类合计功能实现
  6. ALV程序checkbox全选及取消全选
  7. 大于小于优化_工程优化设计与Matlab实现——优化设计的数学基础
  8. android文件存储数组,Android面试简录——文件存储
  9. python语言做法_python学习笔记(十六)
  10. 将列表转成数组_漫画 | 什么是散列表(哈希表)?