鱼C论坛

 找回密码
 立即注册
查看: 1591|回复: 12

“迭代器” 与 “可迭代对象”有什么区别?

[复制链接]
发表于 2018-9-11 21:49:03 | 显示全部楼层 |阅读模式
5鱼币
问题1:迭代器 与 可迭代对象有什么区别?烦请举个例子?谢谢!



问题2:
>>> string = 'abcd'
>>> next(string)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    next(string)
TypeError: 'str' object is not an iterator


这里为什么会报错,小甲鱼不是说字符串就是迭代器吗,为什么这里string 不可迭代?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-11 21:58:16 | 显示全部楼层
字符串是可迭代对象,
迭代器这么用
1.jpeg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-11 23:05:49 From FishC Mobile | 显示全部楼层
字符串是可迭代对象哦,

可迭代对象是一个确定所有元素的序列,
你直接打印出来就会显示出来了,

到迭代器不一样,你直接打印只是一个函数地址,通过迭代这个迭代器,才能获得确定的元素,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 08:45:45 | 显示全部楼层
迭代器并不存储所有数据
迭代对象是所有数据已备好,等你调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 09:06:38 | 显示全部楼层
能用__next__()方法获取下一个元素的对象都是迭代器

可以返回迭代器的对象都是可迭代对象
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 20:21:54 | 显示全部楼层
可迭代对象包含可py中的序列(字符串str,字节bytes,列表list,元组tuple,字典dict,集合set,序列化对象),生成器,迭代器。
生成器与迭代器的区别最明显的就是:
1.生成器是函数
2.迭代器是类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-12 20:50:53 | 显示全部楼层
实现了方法__iter__的对象是可迭代的,而实现了方法__next__的对象是迭代器,这两者不一样,看来str并没有实现__next__方法!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-26 14:47:10 | 显示全部楼层
看了上面的所有答案,基本没个全部正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-26 16:59:15 | 显示全部楼层
四点好 发表于 2019-11-26 14:47
看了上面的所有答案,基本没个全部正确的
  1. from collections.abc import Iterable,Iterator
  2. a = [1,2]
  3. print(isinstance(a, Iterator))
  4. print(isinstance(a, Iterable))

  5. iter_rator = iter(a)
  6. print(isinstance(iter_rator, Iterator))

  7. class IterTest:

  8.     def __iter__(self):
  9.         ...

  10. t = IterTest()
  11. print(isinstance(t, Iterator))
  12. print(isinstance(t, Iterable))
复制代码


这个看起来,可能会比较好理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-26 17:49:59 | 显示全部楼层
Stubborn 发表于 2019-11-26 16:59
这个看起来,可能会比较好理解

今天看了一下午了,基本把迭代器,可迭代对象,生成器看的透透的。前面的回帖解释,很多都是错误的。
话说,为什么没多人去关注Python一些底层的逻辑,网上的迭代器,生成器资料更是天下一大抄。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-26 18:58:45 | 显示全部楼层
四点好 发表于 2019-11-26 17:49
今天看了一下午了,基本把迭代器,可迭代对象,生成器看的透透的。前面的回帖解释,很多都是错误的。
话 ...

更加底层的,都是用C实现的,比如内置的min函数,in函数 都看不好,很好奇底层的逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-26 19:51:18 | 显示全部楼层
Stubborn 发表于 2019-11-26 18:58
更加底层的,都是用C实现的,比如内置的min函数,in函数 都看不好,很好奇底层的逻辑

后面有时间想把java的基础语法学了,C准备最后学基础语法,希望前面少忘记一点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-26 20:16:02 | 显示全部楼层
四点好 发表于 2019-11-26 19:51
后面有时间想把java的基础语法学了,C准备最后学基础语法,希望前面少忘记一点。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 05:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表