有人可以解释__next__
如何使用下面的代码吗?我知道'next'用于迭代器来获取迭代的下一项,通常使用next()
。
我知道__iter__
部分由于执行list()
的{{1}}调用而被执行。但是__next__
一直在执行,几乎就像一个while循环?直到执行StopIteration?
此外,所有“返回”元素都存储在__next__
下?它是否只是存储在内存中,直到__next__
下的return self
将其返回给调用函数?
__iter__
上面的代码产生了例如:
class FRange(object):
def __init__(self, start, stop=None, step=None):
if stop is None:
self.i = 0
self.stop = start
self.step = 1
elif step is None:
self.i = start
self.stop = stop
self.step = 1
else:
self.i = start
self.stop = stop
self.step = step
def __iter__(self):
return self
def __next__(self):
if self.i < self.stop and self.step > 0:
self.i += self.step
return self.i - self.step
elif self.i > self.stop and self.step < 0:
self.i += self.step
return self.i - self.step
else:
raise StopIteration
def rangeFloat(args):
return list(FRange(*args))
答案 0 :(得分:2)
list
基本上像
def list(thing):
result = []
for item in thing:
result.append(item)
return result
和for
循环:
for item in thing:
# loop body
就像
一样iterator = iter(thing):
while True:
try:
item = next(iterator)
except StopIteration:
break
# loop body
将这些内容放在一起,list
调用您的FRange
实例的__iter__
方法来获取迭代器;在这种情况下,迭代器就是你的FRange
实例本身。然后,它会反复调用__next__
并将所有__next__
返回值附加到列表中,直到__next__
提升StopIteration
。引发StopIteration
后,list
将返回其构建的列表。