关于素数生成的一些问题
Topic sourceit=filter(_not_divisible(n),it)
这一句这么理解,
def _not_divisible(n):
return lambda x: x % n > 0
这个函数返回的是这么个玩意
lambda x: x % n > 0
也就是相当于返回了个函数
def fn(x):
return x%n>0
x是这个时候传入的
yield generator懒生成。
it这个iterator的长度不断增加,用next()这个函数得到的下一个值也在不断增加。
在下一个next得到的结果增加的同时,it的定义也在不停地改变,也就是说,it头上不停地套了一个又一个_not_divisible(n) 的filter,每添加一个新的filter,之前的it变为一个匿名变量,而变量名it则指向多了一层filter的新的iterator
你可以把这里的这个iterator想象成一个脖子上套了一层又一层项圈的泰国长颈族。每一个圈都是限制它的filter。
总之这些概念不大直观。希望解释清楚了。
- 1
火-断-狼
对这条代码有一些疑问,希望老师或者各位同学能帮忙解答下,谢谢
在迭代过程中,传入_not_divisible()的n的值是在不断变化的(序列首元素),因此,"筛选"的条件也是在不断的变化,那么,filter在筛选的时候,是不是将每一个筛选条件都保存了下来,再去筛选iterator生成的值,还是直接将筛选条件传递给了iterator?
随着程序的运行,空间和时间的开销会不会越来越大?这条语句的简单的运行过程是怎样的?