一丶首先对于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