我的代码运行错误
class a(object):
def __iter(self):
return 33
b={'a':'aaa','b':'bbb'}
c=a()
print b.itervalues()
print c.itervalues()
请尝试使用代码,而不是文字,因为我的英语不是很好,谢谢
答案 0 :(得分:17)
一个。拼写正确:不
def __iter(self):
但:
def __iter__(self):
在__
之后的iter
和<{1}}之后的。
湾使身体正确:不
return 33
但:
yield 33
或 返回它([33])
如果return
来自__iter__
的值,则返回迭代器( iterable ,如return [33]
中所示,几乎同样好但不完全... );或者,yield
1+值,使__iter__
成为生成器函数(因此它本质上返回生成器迭代器)。
℃。称之为正确:不
a().itervalues()
但是,例如:
for x in a(): print x
或
print list(a())
itervalues
是一种dict方法,与__iter__
无关。
如果你修复了所有三个(!)错误,代码效果会更好; - )。
答案 1 :(得分:5)
关于您的代码的一些事项:
__iter
应为__iter__
__iter__
函数中返回'33'。您应该实际返回迭代器对象。迭代器是一个在调用next()
函数时保持返回不同值的对象(可能是[0,1,2,3 etc]之类的值序列)。这是一个迭代器的工作示例:
class a(object):
def __init__(self,x=10):
self.x = x
def __iter__(self):
return self
def next(self):
if self.x > 0:
self.x-=1
return self.x
else:
raise StopIteration
c=a()
for x in c:
print x
类a
的任何对象都是迭代器对象。调用__iter__
函数应该返回迭代器,因此它返回本身 - 正如你所看到的,a类有一个next()
函数,所以这是一个迭代器对象
当调用下一个函数时,它会保持返回连续值,直到它达到零,然后它发送StopIteration
异常,(适当地)停止迭代。
如果这看起来有点朦胧,我建议您尝试使用代码,然后在此处查看文档:{{3}}
答案 2 :(得分:1)
这是一个实现xrange内置的代码示例:
class my_xrange(object):
def __init__(self, start, end, skip=1):
self.curval = int(start)
self.lastval = int(end)
self.skip = int(skip)
assert(int(skip) != 0)
def __iter__(self):
return self
def next(self):
if (self.skip > 0) and (self.curval >= self.lastval):
raise StopIteration()
elif (self.skip < 0) and (self.curval <= self.lastval):
raise StopIteration()
else:
oldval = self.curval
self.curval += self.skip
return oldval
for i in my_xrange(0, 10):
print i
答案 3 :(得分:0)
您使用的语言功能不正确。
http://docs.python.org/library/stdtypes.html#iterator-types
上面的链接将解释该功能应该用于什么。
您可以尝试使用您的母语查看文档:{{3}}