列表推导与生成器表达式都可以用于初始化元组、数组或其他类型的序列。但列表推导需要先建立一个完整的列表,然后再把这

个列表传递到某个构造函数。而生成器表达式会逐个产出元素,这样显然能够节省内存。

列表推导写法:

codes = [ord(symbol) for symbol in symbols]

x = tuple(codes)

生成器表达式写法:

x = tuple(ord(symbol) for symbol in symbols)

从这个示例中可以看出,生成器表达式比列表推导,减少了创建 codes 变量的内存损耗。

还可以看出生成器表达式的语法跟列表推导相似,但更简洁,因为省略了方括号。这是生成器表达式的省略语法模式。

语法规则如下:

如果生成器表达式是一个函数的唯一入参(比如示例中的 tuple 函数),那么就可以省略外层的圆括号。

如果生成器表达式不是一个函数的唯一入参,即这个函数有多个入参,那么就必须使用圆括号包起生成器表达式,然后再传入函数。

生成器表达式最大的好处就是减少内存损耗。假设我们要计算两个各含有 1000 个元素列表的笛卡儿积,使用生成器表达式就可以减少一个包含 100 万个元素的列表所占用的内存。这一点很像 Java 中的流式编程。

比如说,有一个球袋,里面装着红、黄与绿,三种颜色的球,每种球又分为小、中、大三种规格。那么这个球袋里,就会有 9 种组合。

colors = ['红', '黄', '绿']

sizes = ['小', '中', '大']

for ball in ('%s %s' % (c, s) for c in colors for s in sizes):

logging.info(ball)

运行结果:

INFO - 红 小

INFO - 红 中

INFO - 红 大

INFO - 黄 小

INFO - 黄 中

INFO - 黄 大

INFO - 绿 小

INFO - 绿 中

INFO - 绿 大

python生成表达式_说说 Python 的生成器表达式相关推荐

  1. 如何用python生成表格_用 Python 生成 HTML 表格

    在 邮件报表 之类的开发任务中,需要生成 HTML 表格. 使用 Python 生成 HTML 表格基本没啥难度, for 循环遍历一遍数据并输出标签即可. 如果需要实现合并单元格,或者按需调整表格样 ...

  2. python生成簇_使用Python复现SIGKDD2017的PAMAE算法(并行kmedoids算法)

    作者:坚新 研究方向:自然语言处理 https://github.com/yangjianxin1/PAMAE 编者按:AINLP技术群的坚新同学发布了一个新项目:PAMAE (PAMAE: Para ...

  3. opencv python 生成画布_用Python做自己的2020专属Flag动图

    2020年的开头并不顺利,有不少朋友希望能够重启2020.然而时光不可倒流,我们都应该学会积极的向前看. 我们可以给自己的2020年立下Flag,或者说给自己在这剩下的11个月里定下小目标,并不断为之 ...

  4. python生成统计图_用python Linux(无GUI)中生成统计图

    我有这样一个需求:在我的raspberry pi 3中运行着一个爬虫程序,根据爬到的数据,使用matplotlib自动生成统计图(图片格式),然后发送到我的邮箱. 但是我ssh远程登录树莓派,运行如下 ...

  5. python生成日历_使用Python实现简易月历生成(2)

    生成日历主程序的函数结构和注释:#此功能用于在place处追加字体为f_name,字号为f_size,内容为content的细/粗体字 def convert_text(place, f_name, ...

  6. python生成等值线_在python中生成X,Y数据的等值线图

    嗨,我不确定这是否已经被问过了,但我找不到一个满足我的答案.在 如果你有X,Y和温度数据,请看下面的例子.如何在python中绘制数据的温度等值线X Y Temp 0 0 23 0.1 0 23 0. ...

  7. python生成日历_使用python生成ical日历文件——将课程表导入到手机日历

    1 importdatetime,os2 3 classEvent:4 """ 5 事件对象6 """ 7 def __init__(sel ...

  8. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  9. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

最新文章

  1. HTML+CSS+JS实现 ❤️爱心文字3D旋转动画特效❤️
  2. 在3D模型上选择顶点
  3. ARM指令ldr、str、stm、ldm理解
  4. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_8 Mybatis中的返回值深入-调整实体类属性解决增和改方法的报错...
  5. 使用stream给list集合排序
  6. ubuntu20.04合并拆分pdf
  7. 关于IRR的一些总结
  8. android 实现谷歌地图
  9. 对战平台虚拟War3局域网的原理
  10. c++ STL 算法一
  11. 《计算机操作系统》(第四版)汤子瀛等编著——思维导图详细版本
  12. Nextcloud提供的缺省文件
  13. java 航班_Java实现简单航班查询系统-Go语言中文社区
  14. 广播(Broadcast)的发送与接收
  15. 怎么修改ftp服务器被动端口,如何设置vsftp的被动模式端口
  16. 51单片机定时器初值计算
  17. Spring学习笔记(六)。Spring自动装配,按名称自动装配:byName,按类型自动装配:byType,@Autowired,@Qualifier,@Resource
  18. IT人士最容易得的癌症
  19. 数据分析可视化12 案例 6:竞争优势多维分析图设计
  20. 2022年全球市场动物饲料DHA和EPA总体规模、主要生产商、主要地区、产品和应用细分研究报告

热门文章

  1. Oracle RDA(Remote Diagnostic Agent) 工具说明
  2. js 获取url参数(QueryString)
  3. 2020计算机领域前沿热门技术,CFP: ICPCSEE 2020 (SCI or EI Indexd) 第6届国际计算机前沿大会...
  4. lm358在哪个库里_库里8和aj35哪个好 库里8是安德玛的吗
  5. 反转链表--清晰易懂的两种方法
  6. unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀
  7. 【C++深度剖析教程28】C++对象模型分析
  8. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
  9. ext2 源代码解析之 “从路径名到目标结点” (一)
  10. Java概览(java语言编程艺术笔记)