gpt4 book ai didi

Python 类和 __iter__

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:52 24 4
gpt4 key购买 nike

使用__iter__有什么好处? Python 类中的函数?

在下面的代码中,我只是设置两个简单的类。第一类接受一个列表作为参数,我可以在不使用 __iter__ 的情况下循环这个列表。功能。第二位代码使用 __iter__函数循环遍历列表。

使用__iter__有什么好处?当已经有方法可以循环类中的内容时?

EG 1: no __iter__


class test_class:
def __init__(self, list):
self.container_list = list

def print (self):
a = self.container_list
return a

test_list = test_class([1,2,3,4,5,6,7])

x = test_class.print(test_list)

for i in x:
print (i)



EG 2: yes __iter__

class list_using_iter:
def __init__(self):
self.list = [1,2,3,4]
self.index = -1

def __iter__(self):
return self

def __next__(self):
self.index += 1
if self.index == len(self.list):
raise StopIteration
return self.list [self.index]

r = list_using_iter()
itr = iter(r)

print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))

print(next(itr)) # Raises the exception!

最佳答案

您的第一个示例不可迭代,但包含一个可迭代的属性。您的第二个示例是可迭代的,但您只需“跟随”另一个可迭代即可进行迭代。下面是一个可迭代的示例,它本身可以完成更多工作:

import itertools

class Fibs:
def __init__(self, a, b):
self.a = a
self.b = b

def __iter__(self):
a = self.a
b = self.b
while True:
yield a
a, b = b, a + b

real_fibs = Fibs(0,1)

for i in itertools.islice(real_fibs, 10):
print(i)

Fibs.__iter__ 并不是简单地反刍从其他值的 __iter__ 方法获得的值;它根据需要计算并产生新值。

<小时/>

实际上,前面的例子是一个类知道如何创建自己的迭代器,而不是让每个对象都可迭代。这是一个定义 next 本身的版本。

class Fibs:
def __init__(self, a, b):
self.a = a
self.b = b

def __iter__(self):
return self

def __next__(self):
rv = self.a
self.a, self.b = self.b, self.a + self.b
return rv

关于Python 类和 __iter__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com