【发布时间】:2020-10-30 04:26:35
【问题描述】:
我正在尝试为迭代器创建自己的类并找到了这样一个示例:
class OddNum:
"""Class to implement iterator protocol"""
def __init__(self, num = 0):
self.num = num
def __iter__(self):
self.x = 1
return self
def __next__(self):
if self.x <= self.num:
odd_num = self.x
self.x += 2
return odd_num
else:
raise StopIteration
for num in OddNum(10):
print(num)
输出为:1 3 5 7 9
现在,如果我删除行 odd_num = self.x 并将 return odd_num 更改为 return self.x,我会得到以下输出:3 5 7 9 11
这2个代码有什么区别,为什么要定义一个变量为self.x?
【问题讨论】:
-
您在添加 2 之后而不是之前获取
self.x的值。所以差是2。 -
在您有机会返回初始值之前增加
self.x。 -
如果你想这样做,初始化
self.x = -1,让self.x += 2产生第一个奇数。 -
我赞成,因为这个问题已明确说明并遵循网站规则,无论其复杂性如何。有人会认为这是最低限度的要求,但现在它在初学者中变得如此罕见,我认为应该特别鼓励它。干得好,欢迎来到!
标签: python class iterator next