蟒蛇设计定制迭代器
问题描述:
我在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)
方法解决了这个问题? 类迭代器():
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
答
因为每次调用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
你看起来像是在试图编写协同例程。看[这个问题](http://*.com/questions/19302530/python-generator-send-function-purpose)。 –