首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 迭代器/iterator与生成器/generator的区别

python 迭代器/iterator与生成器/generator的区别

作者头像
未来sky
发布2020-09-29 09:56:58
5100
发布2020-09-29 09:56:58
举报
文章被收录于专栏:好好学习吧好好学习吧

i代表迭代器,g代表生成器

import pickle, time

def gen():
    j = 0
    while j < 7:
        j += 1
        yield j

i = iter([1, 2, 3])
g = gen()

print('i', type(i))
print('g', type(g))
print('i.__dir__()', i.__dir__())
print('g.__dir__()', g.__dir__())
print('next(i)', next(i))
print('next(g)', next(g))
print('i序列化', pickle.dumps(i))
time.sleep(1)
print('g序列化', pickle.dumps(g))

代码输出如下

/Users/xxx/PycharmProjects/Test7788/venv/bin/python /Users/xxx/PycharmProjects/Test7788/test5.py
i <class 'list_iterator'>
g <class 'generator'>
i.__dir__() ['__getattribute__', '__iter__', '__next__', '__length_hint__', '__reduce__', '__setstate__', '__doc__', '__repr__', '__hash__', '__str__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__init__', '__new__', '__reduce_ex__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']
g.__dir__() ['__repr__', '__getattribute__', '__iter__', '__next__', '__del__', 'send', 'throw', 'close', 'gi_frame', 'gi_running', 'gi_code', '__name__', '__qualname__', 'gi_yieldfrom', '__doc__', '__hash__', '__str__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__init__', '__new__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']
next(i) 1
next(g) 1
i序列化 b'\x80\x03cbuiltins\niter\nq\x00]q\x01(K\x01K\x02K\x03e\x85q\x02Rq\x03K\x01b.'
Traceback (most recent call last):
  File "/Users/xxx/PycharmProjects/Test7788/test5.py", line 60, in <module>
    print('g序列化', pickle.dumps(g))
TypeError: can't pickle generator objects

Process finished with exit code 1

可以看到,i和g是不同类的实例,拥有的属性也不同,虽然都可以使用next方法取值,但是i可以序列化,g不可以序列化,说明g的值是运行时动态生成,而i值是固定生成

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档