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