我的代码运行错误
class a(object):
def __iter(self):
return 33
b={'a':'aaa','b':'bbb'}
c=a()
print b.itervalues()
print c.itervalues()
Run Code Online (Sandbox Code Playgroud)
请尝试使用代码,而不是文字,因为我的英语不是很好,谢谢
Ale*_*lli 17
一个.拼写正确:不是
def __iter(self):
Run Code Online (Sandbox Code Playgroud)
但:
def __iter__(self):
Run Code Online (Sandbox Code Playgroud)
与__之前和之后iter.
湾 使身体正确:不是
return 33
Run Code Online (Sandbox Code Playgroud)
但:
yield 33
Run Code Online (Sandbox Code Playgroud)
或归还([33])
如果你return是一个值__iter__,则返回一个迭代器(一个可迭代的,如同return [33],几乎同样好但不完全......); 或者,yield1 +值,__iter__生成一个生成器函数(因此它本质上返回一个生成器迭代器).
C.称之为正确:不是
a().itervalues()
Run Code Online (Sandbox Code Playgroud)
但是,例如:
for x in a(): print x
Run Code Online (Sandbox Code Playgroud)
要么
print list(a())
Run Code Online (Sandbox Code Playgroud)
itervalues是一种dict的方法,与之无关__iter__.
如果你修复了所有三个(!)错误,代码效果会更好;-).
关于代码的一些事情:
__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
Run Code Online (Sandbox Code Playgroud)
类的任何对象a都是迭代器对象.调用__iter__函数应该返回迭代器,所以它返回自己 - 正如你所看到的,a类有一个next()函数,所以这是一个迭代器对象.
当调用下一个函数时,它会保持返回连续值,直到它达到零,然后它发送StopIteration异常,(适当地)停止迭代.
如果这看起来有点朦胧,我建议尝试使用代码,然后在这里查看文档:http://docs.python.org/library/stdtypes.html
| 归档时间: |
|
| 查看次数: |
10156 次 |
| 最近记录: |