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

python内置函数Iter()返回的对象类是什么样子的?,python,iterator,Python,Iterator,我是Python新手,我已经理解了iterables和迭代器对象的概念。我知道所有的迭代器都是迭代器本身,但并不是所有的iterable都像列表一样是迭代器。我的问题是,当我们在一个类似iterables的列表中调用iter()时,在幕后会发生什么,该列表中没有定义next()方法。显然,iter()返回另一个对象,该对象由next()方法定义。 iter()如何将一个参数作为列表并返回一个属于定义了next()方法的python内置iter类的对象。? 谢谢 上面的代码是为了让我理解内置ite

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


上面的代码是为了让我理解内置iter()是如何在后台工作的,以生成包含next()方法的对象。我将自己的iter函数命名为“python_iterator”(类似于iter())。调用此函数时,它与内置iter()完全相同,只是我自己的next()函数(nekst())中没有停止迭代的代码。

即使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的实例。

一般来说,iterables没有定义方法
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
。根据Python关于iterables的手册:一个能够一次返回一个成员的对象。iterables的示例包括所有序列类型(如list、str和tuple)和一些非序列类型,如dict、文件对象以及使用_uiter_____;()方法或实现序列语义的_____; getitem_______;()方法定义的任何类。在特殊情况下,当类确实定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu下一个方法时,iterable对象的
\uuuuuuuuuuuuuuuu
方法将返回
self
。(续)。也就是说,对象的迭代器就是对象本身。否则,
\uuuuuuuuuuuuuuuuuuu
将返回一个单独的迭代器对象,该迭代器对象将定义
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。另外:
next(obj)
导致调用:
obj.\uuu next\uuu()
。对象上没有定义
next
方法。非常感谢您的回答。但正如您所说,iter()如何返回“一个单独的迭代器对象,它定义了下一个迭代器”。。。使用
return
语句。。。返回。。。一些不同的物体。。。这样该对象的类。。。包含
\uuuuuuuuuuuuuuu
方法的定义。它的意思就是它所说的;亲爱的@KarlKnechtel,我再次感谢你为解释这件事所做的努力。。我已经编辑了我的实际问题并添加了一些代码。请回顾代码并反思它。这正是我所想的。当for循环在“l”上调用iter()时,将返回类iterator()的另一个对象,其中定义了next()。我只是想知道它是如何返回一个具有不同类的对象的,现在它被清除了。我开始学习python才两天,我已经上瘾了。我没有编程背景,除了我在工程学位的第四学期时学过C编程。谢谢大家帮助我。
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2