为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2022-11-29 15:18:58
我是 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_objecta=[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 的代码。
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

尽管 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像上面的示例一样同时迭代多个时间的实例。


查看完整回答
反对 回复 2022-11-29
  • 1 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信