Discuss / Python / 关于素数生成的一些问题

关于素数生成的一些问题

Topic source

火-断-狼

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

对这条代码有一些疑问,希望老师或者各位同学能帮忙解答下,谢谢

it=filter(_not_divisible(n),it)

在迭代过程中,传入_not_divisible()的n的值是在不断变化的(序列首元素),因此,"筛选"的条件也是在不断的变化,那么,filter在筛选的时候,是不是将每一个筛选条件都保存了下来,再去筛选iterator生成的值,还是直接将筛选条件传递给了iterator?

随着程序的运行,空间和时间的开销会不会越来越大?这条语句的简单的运行过程是怎样的?

i火星来人

#2 Created at ... [Delete] [Delete and Lock User]
it=filter(_not_divisible(n),it)

i火星来人

#3 Created at ... [Delete] [Delete and Lock User]
it=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是这个时候传入的

闻小雨2010

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

纠结这一句直接换成

it = filter(lambda x: x%n>0, it)

是不行的,求解答。

x1ang_li

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

yield generator懒生成。

it这个iterator的长度不断增加,用next()这个函数得到的下一个值也在不断增加。

在下一个next得到的结果增加的同时,it的定义也在不停地改变,也就是说,it头上不停地套了一个又一个_not_divisible(n) 的filter,每添加一个新的filter,之前的it变为一个匿名变量,而变量名it则指向多了一层filter的新的iterator

你可以把这里的这个iterator想象成一个脖子上套了一层又一层项圈的泰国长颈族。每一个圈都是限制它的filter。

总之这些概念不大直观。希望解释清楚了。


  • 1

Reply