说说 Python 的生成器表达式
发布日期:2021-06-29 21:04:57
浏览次数:2
分类:技术文章
本文共 829 字,大约阅读时间需要 2 分钟。
列表推导与生成器表达式都可以用于初始化元组、数组或其他类型的序列。但列表推导需要先建立一个完整的列表,然后再把这
个列表传递到某个构造函数。而生成器表达式会逐个产出元素,这样显然能够节省内存。列表推导写法:
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 - 绿 大
转载地址:https://deniro.blog.csdn.net/article/details/107727197 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月24日 03时53分43秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
bitbake常用命令
2021-07-03
Git学习(一):git 生成 patch的命令
2021-07-03
Gstreamer学习笔记(8):Gobject类对象
2021-07-03
Gstreamer学习笔记(7):plugin注册流程分析(超详细)
2021-07-03
Gstreamer学习笔记(6):如何创建gstreamer插件?
2021-07-03
AVI封装格式解析
2021-07-03
rmvb 文件格式解析
2021-07-03
C语言:setjmp和longjmp函数使用详解
2021-07-03
FFmpeg常用基本命令
2021-07-03
MPG(MPEG2 Program Stream)格式解析
2021-07-03
Gstreamer学习笔记(4):pad定义、连接、流动
2021-07-03
Gstreamer 学习笔记(3):GstElement状态
2021-07-03
Gstreamer学习笔记(9):message, even, signal区别
2021-07-03
Gstreamer 学习笔记(10):Gstvideodecoder
2021-07-03
Gstreamer学习笔记(11):typefind功能流程简单分析
2021-07-03
在MPEG之前
2021-07-03
MPEG-1
2021-07-03
MPEG-1中I、B、P帧的基本编码原理
2021-07-03
MPEG-2
2021-07-03