2024-05-23 18:46:50 发布
网友
我的代码运行错误
class a(object): def __iter(self): return 33 b={'a':'aaa','b':'bbb'} c=a() print b.itervalues() print c.itervalues()
请尽量用代码,不要用短信,因为我的英语不是很好,谢谢
a.正确拼写:不
def __iter(self):
但是:
def __iter__(self):
在__之前和iter之后。
__
iter
b.使身体正确:不
return 33
yield 33
或者 返回iter([33])
如果从__iter__返回值return,则返回一个迭代器(与return [33]中一样,iterable几乎与return [33]中的一样好,但不完全……);或者,yield1+值,使__iter__成为一个生成器函数(因此它本质上返回一个生成器迭代器)。
__iter__
return
return [33]
yield
c.说对了:不
a().itervalues()
但是,例如:
for x in a(): print x
或者
print list(a())
itervalues是dict的一种方法,与__iter__无关。
itervalues
如果你把三个都修好了(!)错误,代码工作得更好;-)。
关于代码的一些事情:
__iter
next()
下面是迭代器的一个工作示例:
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()函数,因此这是一个迭代器对象。
a
当调用下一个函数时,它将保持返回连续值,直到它达到零,然后发送StopIteration异常,该异常(适当地)将停止迭代。
StopIteration
如果这看起来有点模糊,我建议尝试使用代码,然后在这里查看文档:http://docs.python.org/library/stdtypes.html
下面是一个实现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
a.正确拼写:不
但是:
在
__
之前和iter
之后。b.使身体正确:不
但是:
或者 返回iter([33])
如果从
__iter__
返回值return
,则返回一个迭代器(与return [33]
中一样,iterable几乎与return [33]
中的一样好,但不完全……);或者,yield
1+值,使__iter__
成为一个生成器函数(因此它本质上返回一个生成器迭代器)。c.说对了:不
但是,例如:
或者
itervalues
是dict的一种方法,与__iter__
无关。如果你把三个都修好了(!)错误,代码工作得更好;-)。
关于代码的一些事情:
__iter
应该是__iter__
__iter__
函数中返回“33”。实际上,您应该返回一个迭代器对象。迭代器是一个对象,当调用next()
函数时,它会不断返回不同的值(可能是一系列值,如[0,1,2,3等])。下面是迭代器的一个工作示例:
类
a
的任何对象都是迭代器对象。调用__iter__
函数应该返回迭代器,因此它返回本身–如您所见,a类有一个next()
函数,因此这是一个迭代器对象。当调用下一个函数时,它将保持返回连续值,直到它达到零,然后发送
StopIteration
异常,该异常(适当地)将停止迭代。如果这看起来有点模糊,我建议尝试使用代码,然后在这里查看文档:http://docs.python.org/library/stdtypes.html
下面是一个实现xrange内置的代码示例:
相关问题 更多 >
编程相关推荐