由python内置函数Iter()重新调整的对象类是什么样的?



我是Python的新手,我已经理解了迭代对象和迭代器对象的概念。我知道所有迭代器都是迭代器本身,但并非所有迭代对象都是像列表一样的迭代器。我的问题是,当我们在未定义 next(( 方法的可迭代对象列表上调用 iter(( 时,幕后会发生什么。显然,iter(( 返回了另一个对象,其中定义了 next(( 方法。 iter(( 如何将参数作为列表并返回属于 python 内置的 iter 类并定义 next(( 方法的对象。 谢谢

def python_iterator(list_without_next_method):
class iter2:
def __init__(self, lst):
self.lst=lst
self.n=0
def __nekst__(self):
b=self.lst[self.n]
self.n += 1
return b
iterator_object=iter2(list_without_next_method)
return iterator_object
a=[1,2,3,4,5,6]
iterator=python_iterator(a)
print(iterator.__nekst__())
print(iterator.__nekst__())
print(iterator.__nekst__())
print(iterator.__nekst__())
print(iterator.__nekst__())
print(iterator.__nekst__())
print(iterator.__nekst__())

上面的代码是为了让我自己理解内置的 iter(( 如何在幕后工作以制作包含 next(( 方法的对象。我将自己的迭代函数命名为"python_iterator"(类似于iter(((。当调用这个函数时,它完全按照内置的 iter(( 执行的操作,除了在我自己的 next(( 函数( nekst((( 中没有用于 Stopiteration 的代码。

即使 Python 列表是可迭代的,让我们假设它们不是:

class MyList():
class Iterator():
def  __init__(self, lst):
self.lst = lst
self.index = -1
self.max_index = len(lst)
def __next__(self):
self.index += 1
if self.index == self.max_index:
raise StopIteration()
return self.lst[self.index]
def __init__(self, lst):
self.lst = lst
def __iter__(self):
return MyList.Iterator(self.lst)

l = MyList([0, 1, 2])
for i in l:
for j in l:
print (i, j)

指纹:

0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2

重要说明

我应该提到,将MyList的迭代器实现为一个单独的类,该类维护自己的迭代状态,这允许您同时多次迭代MyList的实例,如上例所示。

最新更新