目的:想要一个自增生成页码的生成器,但是一开始未必知道总页数。
方法:自定义一个生成器里,生成器内一开始使用 itertools.count 循环 yield 出自增数字。在得到总页数后,结束 itertools.count 的循环,并定义一个以当前数字和总数为范围的 range ,循环 yield 出 range 生成的数字直到结束。
from itertools import count
def pageGenerator(start):
counter = count(start)
while total == 0:
yield next(counter)
ranger = iter(range(next(counter), total_page() + 1))
for page in ranger:
yield page
* total 为全局变量,如果有需要,可以改为指针参数输入。如 def pageGenerator(start, *total) 。
这个方法看起来并不比直接用 itertools.count 生成后判断省资源,看起来也更复杂。但是在项目中,如果有个地方需要根据不同的情况,使用不同的迭代器、生成器进行循环的时候,这种方式至少可以让你不需要在外部循环的时候,还要考虑在不同的情况进行不同的处理。只需要根据不同的情况扔给它不同的迭代器、生成器,至于需要循环哪些内容,让这些迭代器、生成器自己去处理就好了。