Python - __iter__ 的内部运作
Python - inner workings of __iter__
我得到了以下 class:
class RandomNumbers:
def __init__(self, length, *, range_min=0, range_max=10):
self.length = length
self.range_min = range_min
self.range_max = range_max
self.i = 0
def __len__(self):
return self.length
def __next__(self):
if self.i >= self.length:
raise StopIteration
number = random.randint(self.range_min, self.range_max)
self.i += 1
return number
def __iter__(self):
print("I was called")
return self
这允许我使用 for 循环:
for number in RandomNumbers(10):
print(number)
这行得通。当我注释掉 __iter__
时,出现以下错误:
TypeError: 'RandomNumbers' object is not iterable
好的,到目前为止一切顺利。我知道我需要 __iter__
方法,但为什么它实际上只有 returns self
?
您的 for 循环可以重写为这个有点等效的代码
it = iter(RandomNumbers(10))
while True:
try:
number = next(it)
except StopIteration:
break
else:
# Body of the for loop
print(number)
您的 class 需要实现 __iter__
方法以使用迭代器响应 iter()
函数,在您的情况下 self
因为您的 class实现 __next__
使其成为迭代器
我得到了以下 class:
class RandomNumbers:
def __init__(self, length, *, range_min=0, range_max=10):
self.length = length
self.range_min = range_min
self.range_max = range_max
self.i = 0
def __len__(self):
return self.length
def __next__(self):
if self.i >= self.length:
raise StopIteration
number = random.randint(self.range_min, self.range_max)
self.i += 1
return number
def __iter__(self):
print("I was called")
return self
这允许我使用 for 循环:
for number in RandomNumbers(10):
print(number)
这行得通。当我注释掉 __iter__
时,出现以下错误:
TypeError: 'RandomNumbers' object is not iterable
好的,到目前为止一切顺利。我知道我需要 __iter__
方法,但为什么它实际上只有 returns self
?
您的 for 循环可以重写为这个有点等效的代码
it = iter(RandomNumbers(10))
while True:
try:
number = next(it)
except StopIteration:
break
else:
# Body of the for loop
print(number)
您的 class 需要实现 __iter__
方法以使用迭代器响应 iter()
函数,在您的情况下 self
因为您的 class实现 __next__
使其成为迭代器