类型错误 Iter - Python3
Type error Iter - Python3
有人可以解释为什么下面的代码给出
TypeError: iter() returned non-iterator of type 'counter' in python 3
这在 python 2.7.3 中运行,没有任何错误。
#!/usr/bin/python3
class counter(object):
def __init__(self,size):
self.size=size
self.start=0
def __iter__(self):
print("called __iter__",self.size)
return self
def next(self):
if self.start < self.size:
self.start=self.start+1
return self.start
raise StopIteration
c=counter(10)
for x in c:
print(x)
在 python3.x 中你需要使用 __next__()
而不是 next()
。
PEP 3114: the standard next() method has been renamed to __next__().
但是,如果您希望您的对象在 python 2.X 和 3.X 中都可迭代,您可以将 next
函数分配给名称 __next__
.
class counter(object):
def __init__(self,size):
self.size=size
self.start=0
def __iter__(self):
print("called __iter__",self.size)
return self
def next(self):
if self.start < self.size:
self.start=self.start+1
return self.start
raise StopIteration
__next__ = next # Python 3.X compatibility
您需要 __next__(self)
不是下一个:
def __next__(self):
有人可以解释为什么下面的代码给出
TypeError: iter() returned non-iterator of type 'counter' in python 3
这在 python 2.7.3 中运行,没有任何错误。
#!/usr/bin/python3
class counter(object):
def __init__(self,size):
self.size=size
self.start=0
def __iter__(self):
print("called __iter__",self.size)
return self
def next(self):
if self.start < self.size:
self.start=self.start+1
return self.start
raise StopIteration
c=counter(10)
for x in c:
print(x)
在 python3.x 中你需要使用 __next__()
而不是 next()
。
PEP 3114: the standard next() method has been renamed to __next__().
但是,如果您希望您的对象在 python 2.X 和 3.X 中都可迭代,您可以将 next
函数分配给名称 __next__
.
class counter(object):
def __init__(self,size):
self.size=size
self.start=0
def __iter__(self):
print("called __iter__",self.size)
return self
def next(self):
if self.start < self.size:
self.start=self.start+1
return self.start
raise StopIteration
__next__ = next # Python 3.X compatibility
您需要 __next__(self)
不是下一个:
def __next__(self):