小编Chi*_*aca的帖子

你称之为具有两种不同"完成"状态的迭代器是什么?

在查询具有未知长度的分页列表的API时,我发现自己基本上在做

def fetch_one(self, n):
    data = json.load(urlopen(url_template % n))
    if data is None:
        self.finished = True
        return
    for row in data:
        if row_is_weird(row):
            self.finished = True
            return
        yield prepare(row)

def work(self):
    n = 1
    self.finished = False
    while not self.finished:
        consume(self.fetch_one(n))
        n += 1
Run Code Online (Sandbox Code Playgroud)

之间的分裂work,并fetch_one使得它很容易测试,但通过实例变量的信令意味着我不能有一个以上的work在同一时间,这吮吸回事.我提出了我认为更清洁的解决方案,但它涉及一个具有两个"完成"状态的迭代器,我不知道该怎么称呼它.我确定这种模式存在于其他地方,所以我很欣赏指针(或者为什么这是愚蠢的原因):

class Thing(object):
    def __init__(self, gen):
        self.gen = gen
        self.finished = False

    def __iter__(self):
        return self

    def __next__(self):
        try:
            v = next(self.gen)
        except StopThisThing:
            self.finished = True
            raise StopIteration
        else: …
Run Code Online (Sandbox Code Playgroud)

python naming-conventions

6
推荐指数
1
解决办法
264
查看次数

标签 统计

naming-conventions ×1

python ×1