本人最近在学习生成器,遇到一段利用itertools.takewhile构造等差数列生成器工厂函数的代码实例,代码如下:
import itertools
def aritprog_gen(begin, step, end=None):
first = type(begin + step)(begin)
ap_gen = itertools.count(first, step)
if end is not None:
ap_gen = itertools.takewhile(lambda n: n < end, ap_gen)
return ap_gen
问题:这个生成器工厂函数在end非空时如何停止产值?
详细描述:请问当end是非空数值时,若程序运行到即将生成次序不小于end+1的临界点,此时if语句上面的ap_gen正常产值。而继续运行到下面,takewhile因为不满足lambda n: n < end停止产值,那停止产值是一个takewhile对象,赋值给ap_gen就可以停止迭代产值了?
请明白的前辈帮忙指点一下迷津,感激不尽!!!
https://docs.python.org/3/lib...
官网解释takewhile 就是返回一个迭代器,所以跟普通迭代器一样没值就抛StopIteration异常啦,下面是普通迭代器
不是一直个ap_gen赋值,把函数aritprog_gen改了,a还是itertools.takewhile的对象