|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
学到了__iter__和__next__方法, 涉及到了“可迭代对象” 和 “迭代器” ,说实话,确实有些含糊,不知道问题问的合适不?请老师指点。
- >>> class A:
- def __iter__(self):
- pass
- >>> a = A()
- >>> isinstance(a, Iterable)
- True
复制代码
1. 第一个问题,如果一个类中有__iter__方法,那么,由这个类生成的对象,就是 “可迭代对象”,对吗?
- >>> class B:
- def __next__(self):
- pass
- >>> b = B()
- >>> isinstance(b, Iterable)
- False
- >>> isinstance(a, Iterator)
- True
复制代码
2. 第二个问题,如果一个类中由__next__方法,那么, 由这个类生成的对象,有可能变成“迭代器”,对吗?
- >>> class A:
- def __iter__(self):
- pass
- def __next__(self):
- pass
-
- >>> a = A()
- >>> isinstance(a, Iterable)
- True
- >>> isinstance(a, Iterator)
- True
复制代码
3. 第三个问题,如果这两个方法同时拥有, 由这个类生成的对象,既是“可迭代对象”, 又会成为“迭代器”,对吗?
4. 第四个问题,其实虽然类中含有这两个方法,只能说python认为他是“可迭代对象”或者“迭代器”, 实际用的时候,如果不是列表、元组的话,还是不行的,对吗?
5. 第五个问题,“可迭代对象” 和 “迭代器” 到底是对象吗? 如果是对象,他们到底来源于哪个“类”啊,如果不是对象,到底应该算什么?
本帖最后由 歌者文明清理员 于 2023-6-22 13:32 编辑
- 是的,如果一个类中有实现了__iter__方法,则由这个类生成的对象就是可迭代对象。
- 对的,如果一个类中实现了__next__方法,则由这个类生成的对象有可能会变成迭代器。
- 是的,同时实现了__iter__和__next__方法的类生成的对象既可以被认为是可迭代对象,又可以认为是迭代器。
- 是的,在实际使用时,如果不是列表、元组等内置可迭代对象,即使该对象实现了__iter__和__next__方法,也不能直接使用for循环进行迭代。
- “可迭代对象” 和 “迭代器” 都是一种Python中的概念,是由Python中内置的“Iterable”和“Iterator”两个类分别实现的。所以它们并不是普通的类对象,而是一种特殊的对象。可以简单理解为,我们在使用Python时,可以把某些对象看作“可迭代对象”或者“迭代器”,从而对这些对象进行迭代操作。
|
|