生成器和迭代器

#列表生成式
lis = [x*x for x in range(10)]
print(lis)
#生成器1
generator_ex_1 = (x*x for x in range(10))
#生成器2
def generator_ex_2(max):
    n,a,b =0,0,1
    while n < max:
        yield b
        a,b =b,a+b
        n = n+1
    return 'done'
a = generator_ex_2(10)
print(generator_ex_2(10))
#generator_ex是生成器对象
print(generator_ex)

可以用next(生成器),但是我们一般用for循环来迭代生成器

使用生成器的好处:

1.内存使用更加高效。比如列表是在建立的时候就分配所有的内存空间,而生成器是需要的时候才使用,更像一个记录
2.如果我们要读取并使用的内容远远超过内存,但是需要对所有内容进行处理,那么生成器是一个很好的选择,比如可以让生成器返回当前的处理状态,由于它可以保存状态,那么下一次直接处理即可。

生成器的其他操作,导入迭代器包itertools库

imap

#没有计算,只返回一个迭代对象,普通的map已经计算完毕了,并且返回一个列表
r = itertools.imap(lambda x: x*x, [1, 2, 3])
print(r)
itertools.imap object at 0x103d3ff90>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文/九州 最近新书读的多,历史、传记、心理、医学、记忆、Big data、AI……也听一些如“得到...
    九州_a59a阅读 656评论 0 2
  • 黄沙半埋着……倾倒的石碑……碑文刻着……人治的时代…… 我看见……阴养死士……杀君弑主……也瞥见……怀以仁义……施...
    吃土是暂时的阅读 149评论 0 0
  • 第三周了,体重74.7,刷牙了,体温还没测量,醒来后还是没啥精神,左肋有些隐隐的痛,不知道是心理作祟还是得了啥。 ...
    人生悔过阅读 150评论 0 0