python的可迭代对象和迭代器
Posted iiiLISA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的可迭代对象和迭代器相关的知识,希望对你有一定的参考价值。
精进成长的本质是消除模糊。
文章目录
迭代器的定义
:
1、类中定义了__iter__
和__next__
两个方法
2、__iter__
方法需要返回对象本身,即self
3、__next__
方法,返回下一个数据,如果没有数据了,返回一个StopIteration
的异常
可迭代对象
:
如果一个类中有__iter__
方法且返回一个迭代器,则我们称这个类创建的对象为可迭代对象。
可迭代对象没有__next__
方法。
但其__iter__
方法返回的迭代器含有__iter__
方法和__next__
方法。
练习:基于可迭代对象和迭代器实现,自定义range
# 迭代器类
class IterRange(object):
def __init__(self, num):
self.num = num
self.count = -1
def __iter__(self):
return self
def __next__(self):
self.count += 1
if self.count == self.num:
raise StopIteration()
return self.count
# 可迭代对象类
class Xrange(object):
def __init__(self, max_num):
self.max_num = max_num
def __iter__(self):
return IterRange(self.max_num)
# 返回一个迭代器
obj = Xrange(10)
for item in obj:
print(item)
l1 = list([11, 22, 33, 44, 55, 66])
# list单纯是可迭代对象(不是迭代器),因为在list函数中声明了一个__iter__方法并且返回了一个迭代器l1
print('__next__' in list.__dir__(l1)) # False
print('__iter__' in list.__dir__(l1)) # True
print(dir(list))
print("*********************")
print(isinstance(l1, Iterator)) # False,l1是个可迭代对象,
print(isinstance(l1, Iterable)) # True,l1是迭代器:判断依据是:含有__iter__方法和__next__方法
l2 = [777, 888, 999]
print(isinstance(l2, Iterator)) # False
print(isinstance(l2, Iterable)) # True
i=l2.__iter__()
print(isinstance(i, Iterator)) # True
print(isinstance(i, Iterable)) # True
以上是关于python的可迭代对象和迭代器的主要内容,如果未能解决你的问题,请参考以下文章