簡體   English   中英

重用; 即,在 class 中的 python 數據生成器的 stream 中繼續

[英]Reusing; i.e., continuing in stream of a python data generator in a class

我編寫了以下示例 class,它具有一個生成器——在本例中是一個范圍 object。

class tmp():

    def _setgen(self):
        self.gen = range(1,5)

    def __init__(self):
        self._setgen() # I define my generator only once; here in the __init__()

    def getval(self):

        for g in self.gen: # use the afore defined `gen`
            print(g)
            if g > 2:
                break


t = tmp() # init the object; including the range within the object

t.getval() # As expected numbers 1,2,3

t.getval() # Expect Number 4; but get again 1,2,3

為什么 object 范圍被重置? 我想繼續,我在休息時停了下來。 所以t.getval()的第二次調用應該打印一個 4,而不是從重新開始對新的 (?) 范圍 object 進行操作。

什么是解決我“想要的行為”的方法?

self.gen = iter(range(1, 5))

會成功的。 如果要將其保留為 state,則gen應該是該range的迭代器。

每次調用時, getval中的for循環都會將range包裝在一個新的iter中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM