Python中的可迭代对象是指可以被for循环遍历的对象,如list、tuple、dict等。但除此之外,我们也可以自定义可迭代的类来实现遍历。下面我就来为大家详细讲解“Python进阶之自定义可迭代的类”的完整攻略。
1. 可迭代对象和迭代器
在自定义可迭代的类之前,我们首先需要了解可迭代对象和迭代器的概念。
- 可迭代对象:实现了
__iter__()
方法的对象,其返回值通常是一个迭代器。 - 迭代器:实现了
__next__()
和__iter__()
方法的对象,它通过遍历的方式,逐一返回元素。当没有更多的元素可以返回时,就抛出StopIteration异常。
下面是一个简单的示例,演示了可迭代对象和迭代器的概念。代码中定义了一个可迭代对象MyIterable,其中实现了__iter__()
方法并返回了一个迭代器MyIterator,后者实现了__next__()
和__iter__()
方法,每次返回一个元素:
class MyIterator:
def __init__(self, lst):
self.index = 0
self.lst = lst
def __next__(self):
if self.index < len(self.lst):
element = self.lst[self.index]
self.index += 1
return element
else:
raise StopIteration()
def __iter__(self):
return self
class MyIterable:
def __init__(self):
self.lst = [1, 2, 3]
def __iter__(self):
return MyIterator(self.lst)
iterable = MyIterable()
for element in iterable:
print(element)
输出结果为:
1
2
3
2. 如何自定义可迭代的类
自定义可迭代的类需要实现__iter__()
方法,该方法返回一个迭代器对象。下面是一个示例,定义了一个MyRange类,实现了__iter__()
方法和__next__()
方法,可以使用for
循环语句遍历该类实例的元素:
class MyRange:
def __init__(self, start, end):
self.start = start
self.end = end
def __iter__(self):
self.current = self.start
return self
def __next__(self):
if self.current < self.end:
element = self.current
self.current += 1
return element
raise StopIteration()
mr = MyRange(1, 5)
for element in mr:
print(element)
输出结果为:
1
2
3
4
3. 如何使用yield实现可迭代对象
除了实现__iter__()
方法并返回迭代器,我们还可以使用yield
语句来实现可迭代的类。当函数使用yield
返回一个值时,它会暂停运行并保留当前状态,等待下一次调用。下面是一个示例,定义了一个MyIterable类,该类使用yield
语句来实现了遍历的方法:
class MyIterable:
def __init__(self, lst):
self.lst = lst
def __iter__(self):
for element in self.lst:
yield element
mi = MyIterable([1, 2, 3])
for element in mi:
print(element)
输出结果为:
1
2
3
以上就是“Python进阶之自定义可迭代的类”的完整攻略,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python进阶之自定义可迭代的类 - Python技术站