我在python中设计一个自定义迭代器:
class Iterator():
def __init__(self):
return
def fit(self, n):
self.n = n
return self
def __iter__(self):
for i in range(self.n):
yield i
return
it = Iterator().fit(10)
for i in it:
print(i)
it.fit(20)
for i in it:
print(i)
它工作正常,但我想知道是否有可能在前一个完成之前调用一个新的fit
导致类的奇怪行为。
如果是,我应该如何设计它以使其更强大?
从fit
方法传递一些参数非常重要。
编辑:我将介绍一个类似于我原来问题的例子
iterator
类旨在供User
类使用。重要的是,在evaluate
方法被调用之前,所有数字都将被打印n/k
。没有任何例外。
也许使用iterator.fit(n)
方法解决了这个问题?
class Iterator():
def __init__(self, k):
self.k = k
return
def fit(self, n):
for i in range(int(n/self.k)):
yield i
return
class User():
def __init__(self, iterator):
self.iterator = iterator
return
def evaluate(self, n):
for i in self.iterator.fit(n):
print(i)
return
it = Iterator(2)
u = User(it)
u.evaluate(10) # I want to be sure that all the numbers until 9 are printed
u.evaluate(20) # I want to be sure that all the numbers until 20 are printed
答案 0 :(得分:1)
因为每次调用range
都会创建一个新的迭代器,所以如果您多次调用fit
,就不会发生冲突。
你的课有点奇怪。你可以删除__init__
,因为它什么都不做,或者将fit
方法放在那里。
it = Iterator()
it1 = iter(it.fit(10))
it2= iter(it.fit(5))
print it1.next()
print it1.next()
print it2.next()
print it1.next()
>>0
1
0
2
答案 1 :(得分:0)