python 内置函数 Iter() 返回的 Object 类是什么样子的?

我是 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() 方法的对象。我将自己的 iter 函数命名为“python_iterator”(类比迭代器())。当调用此函数时,它会执行内置 iter() 将执行的操作,只是在我自己的 next() 函数 (nekst()) 中没有用于 Stopiteration 的代码。


杨魅力
浏览 52回答 1
1回答

隔江千里

尽管 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 00 10 21 01 11 22 02 12 2重要的提示我应该提到,将迭代器实现MyList为一个单独的类,它保持自己的迭代状态,这使您可以MyList像上面的示例一样同时迭代多个时间的实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python