python生成表达式_说说 Python 的生成器表达式

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

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

列表推导写法:

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 - 绿 大

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值