对于generator + filter 求素数数列有点困惑
Topic source首先,要分清generator函数,和generator。我们通过调用generator函数产生generator,所以_odd_iter()是generator函数或者简单说就是函数,而it=_odd_iter(),即这个函数调用的结果才是generator。
可以用python内置的type函数去验证一下:
print(type(it))
print(type(_odd_iter))
返回结果是:
<class 'generator'>
<class 'function'>
然后,我们可以用同样的方法看一下会发现primes是函数,而调用primes的结果仍然是generator。
所以,你的理解除了_odd_iter()和prime是函数外,理解是完全对的。因为generator是惰性序列,所以在我们调用next()之前,他们不做任何计算。
个人的理解,如果把你讲的更糊涂,请原谅。
- 1
shhdht
原始奇数数列_odd_iter() 本身是个 generator,代表一个无限的列表,那它之中的元素是什么时候计算出来的呢?例如,当n到3时,这个列表中万亿级别、是3倍数的元素已经可以被filter掉了?还是说这里 filter 的作用是给 odd_iter 这个 generator 附加了条件,生成名为 prime 的新 generator,事实上在打印之前,两个 generator 都没有做任何计算?