gpt4 book ai didi

python - 为我的自定义迭代器实现 iteritems 函数?

转载 作者:太空狗 更新时间:2023-10-30 00:08:31 26 4
gpt4 key购买 nike

以下程序的目标是学习 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()

CodePAD link

最佳答案

iteritems应该为字典返回一系列 (key, val) 对,所以我认为它不适合你的类(class)。如果您创建了 UserDict 的后代,则可能需要覆盖它。

如果您确实要覆盖 iteritems,您应该通过生成键值对来实现。

可怜的程序员:

def iteritems(self):
return iter([(x[0], x) for x in "alpha bravo charlie".split()])

关于python - 为我的自定义迭代器实现 iteritems 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com