美文网首页
python 生成器表达式

python 生成器表达式

作者: Noza_ea8f | 来源:发表于2020-03-24 17:04 被阅读0次

列表推导式

ls1 = [i * 2 for i in range(5)]  # 列表推导式
print(ls1)
输出
[0, 2, 4, 6, 8]

这里的值直接生成并存在内存中;

生成器表达式

ls2 = (i * 2 for i in range(5))  # 生成器表达式
print(ls2)
输出
<generator object <genexpr> at 0x00000292C92F1E58>

这是一个生成器对象;
看看里面有什么,打印一下:

print(ls2.__next__())
print(ls2.__next__())
输出
0
2

开始时值并没有生成,当取值时值开始生成出来;
这样就节省了内存;

特别声明

在一个生成器对象中;

  • 取值是依次进行的;
  • 一个值取出来后就不能再去这个值了;
  • 被同意的生成器生成的对象是相同的;
    这就好比我有一台生产盒装饼干的机器;
    每次运行它都可以为我生成一盒饼干;
    我可以从盒子里依次取出饼干并享用它;
    但我不能重复享用我吃掉的饼干;
    如果我还想要一盒饼干怎么办呢?
    那很简单;
    再生产一盒就行了;
    严格说来这一盒和上一盒不是同一盒;
    但可以达到和上一盒同样的效果;
    这一盒就是另外一个对象了;
    这个比喻只能说是类似;
    因为机器生产出一盒饼干后,盒子里面是有饼干的;
    而生成器只有在取值时才生成值;

列表推导式和生成器表达式的区别

只要把[]换成()列表推导式就变成了生成器表达式

相关文章

网友评论

      本文标题:python 生成器表达式

      本文链接:https://www.haomeiwen.com/subject/whdoyhtx.html