迭代器生成器可迭代对象
Posted fishbiubiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器生成器可迭代对象相关的知识,希望对你有一定的参考价值。
1.如果一个对象同时含有__iter__()方法和next()方法,那他就是一个迭代器
2.只含有__iter__()方法,并且该方法返回一个迭代器,那他就是一个可迭代对象
3.只有next方法,啥都不是。但是可以直接用next(obj)调用该对象。next(obj)方法的本质就是调用obj对象的next()方法,无论obj对象是否为迭代器
举例来说,Python的list数据类型:
print dir([1,2,3])
>>
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘]
含有__iter__方法但是没有next()
然后再执行 print type([1,2,3].__iter__())
>> <type ‘listiterator‘>
返回的是一个list类型的迭代器。
因此,list是一个可迭代对象,但是不是一个迭代器
再举个例子,自定义一个迭代器
class Fib: def __init__(self): self.prev = 0 self.curr = 1 def __iter__(self): return self #这里返回自身就够了,因为自身就是已经有__iter__和next方法的迭代器了 def next(self): value = self.curr self.curr += self.prev self.prev = value return value
以上是关于迭代器生成器可迭代对象的主要内容,如果未能解决你的问题,请参考以下文章
python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明