<generator object 类名 at 0x0000000002688190>

       建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问
前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。如果列表元素可以按照某
种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?就是一个列
表中存一个数字和算法(也可以说指针)。这种一边循环一边计算的机制,称为生成器(
Generator)
【简单生成器】
        要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]
改成()

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>

      创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?

第一种:如果要一个一个打印出来,可以通过generator的next()方法: 

>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
>>> g.next()
16
>>> g.next()
25
>>> g.next()
36
>>> g.next()
49
>>> g.next()
64
>>> g.next()
81
>>> g.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

缺点是只有一个元素的时候或者到最后一个元素会报错。
第二种:使用for循环,因为generator也是可迭代对象

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print (n)
...
0
1
4
9
16
25
36
49
64
81

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值