【发布时间】:2017-09-03 05:37:06
【问题描述】:
有人可以解释__next__ 如何与下面的代码一起工作吗?我知道'next'用于迭代器来获取可迭代的下一项,通常使用next()。
我知道__iter__ 部分会因为执行__next__ 的list() 调用而被执行。但是__next__继续执行,就像一个while循环?直到 StopIteration 被执行?
另外,__next__ 下存储的所有“返回”元素在哪里?是不是全部都存储在内存中,直到__iter__下的return self返回给调用函数?
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))
上面的代码产生例如:
For args = [-1.1, 2.4, 0.3], the output is
rangeFloat(args) = [-1.1, -0.8, -0.5, -0.2, 0.1, 0.4, 0.7, 1, 1.3, 1.6, 1.9, 2.2].
【问题讨论】: