迭代器浅谈

一丶首先对于python对象的理解:

对于python确实万物皆对象,包括我们定义的列表,字典,等等,都是对象,在深层次的内部,都有一个类来定义该变量或者数据类型。所以展现在我们面前的,确实是一个封装好的对象。
对于可迭代对象,我们可以实现的操作是什么呢?最基本的就是可以实现for in 遍历。也就是说可以进行fro in 遍历的对象就是可迭代对象。

二丶关于可迭代对象的理解:

list1 = []
from collections import Iterable
result = isinstance(list1, Iterable)
print(result)
注:先介绍一个方法isinstance:检测一个对象是否可迭代,通过返回的boolean值来判断该对象是否可以迭代。

列表是一个可迭代对象毋庸置疑,这里的结果也毫无疑问是True,但是对于类 呢?

class A(object):
    def __iter__(self):
        pass
a = A()
result = isinstance(a, Iterable)  # 检查是否是一个迭代对象的方法
print(result)

这里也会返回一个True,其实在使用isinstance方法的时候,关键是查看该对象的方法中有没有__iter__方法。

三丶迭代器的使用:(使用迭代器来实现列表的原理)

class List1(object):
    def __init__(self):
        self.items = items
    def appendItem(self, item):
        self.items.append(item)
    def __iter__(self):
        self.iteration = Iteration(self.items)
        return self.iteration
class Iteration(object):
    def __init__(self, items):
        self.items = items
        self.current_index = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.current_index < len(self.items):
            self.item = self.items[self.current_index]
            self.current_index += 1
            return self.item
lists = List1()
lists.appendItem("张三")
lists.appendItem("李四")
lists.appendItem("c罗")
result = isinstance(lists, Iterable)
print(result)
print(lists.iteration)       

关于上面代码做一些解释:

迭代器和可迭代对象的区别:

迭代器中有俩个方法:__iter__和__next__方法
而可迭代对象的判断依靠于__iter__方法
所以单纯的函数或者类中有一个__iter__方法的时候,我们只能单方面的说他们的实例化对象是可迭代对象.

迭代器中的方法的具体功能:
既然同时有俩个方法才能称之为迭代器,那么这俩个方法具体是实现什么功能呢?

1>.要求__iter__方法中必须返回了一个实现了__next__方法的对象.
这个是什么意思呢?简单来说就是你返回的必须是一个对象,同时这个对象所属的类中必须有__next__方法

2>.__next__具体的实现迭代(遍历)的过程.
def next(self):
if self.current_index < len(self.items):
self.item = self.items[self.current_index]
self.current_index += 1
return self.item

猜你喜欢

转载自blog.csdn.net/weixin_44034278/article/details/85307465