以下程序的目标是学习python生成器和迭代器实现,以便理解python魔术方法。在
我无法实现iteritems()
函数。另外,我想知道我是在正确的方向上,还是在概念上理解了python魔术方法。在
import random
class Random(object):
""" generate randomised int of specified length --> [r1, r2, r3....] """
def __init__(self, length = 1, rand_range = 100):
self.index = 0
self.generated_range = []
self.length = length if str(length).isdigit() else 1
self.rand_range = rand_range if str(rand_range).isdigit() else 100
def __iter__(self): return self
def next(self):
if self.index < self.length:
item = random.randrange(0, self.rand_range)
self.generated_range.append(item)
self.index += 1
return item
raise StopIteration
def __eq__(self, obj):
if self.length == obj.length and self.rand_range == obj.rand_range:
return True
return False
def __len__(self):
return self.length
def __contains__(self, item):
if not self.index == self.length:
while self.next(): continue
if item in self.generated_range:
return True
return False
def __getitem__(self, key):
if key in self.generated_range:
return key * 100
raise KeyError
def __setitem__(self, key, value):
raise NotImplemented
def __delitem__(self, key):
raise NotImplemented
def iteritems(self):
if not self.index == self.length:
while self.next(): continue
for item in self.generated_range:
yield item
if __name__ == '__main__':
r1 = Random(10)
print [ r for r in r1]
print 10 in r1
r2 = Random(20)
print r2.iteritems()
iteritems应该为字典返回(key,val)对序列,因此我认为它不适合您的类。如果您创建了UserDict的子代,那么可能需要重写它。在
如果确实重写iteritems,那么应该通过生成键、值对来实现。在
编程错误:
相关问题 更多 >
编程相关推荐