公共和儿媳

Discuss / Python / 对于generator + filter 求素数数列有点困惑

对于generator + filter 求素数数列有点困惑

Topic source

shhdht

#1 Created at ... [Delete] [Delete and Lock User]

原始奇数数列_odd_iter() 本身是个 generator,代表一个无限的列表,那它之中的元素是什么时候计算出来的呢?例如,当n到3时,这个列表中万亿级别、是3倍数的元素已经可以被filter掉了?还是说这里 filter 的作用是给 odd_iter 这个 generator 附加了条件,生成名为 prime 的新 generator,事实上在打印之前,两个 generator 都没有做任何计算?

首先,要分清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

Reply