问个问题
Topic source按照廖雪峰老师的思路,
while True:
n=next(it)
yield n
it=filter(not_divisible(n),it)
此时it的第一个数字是3,3是素数,输出后,此时n是3,再根据
def not_divisible(n):
return lambda x: x%n>0
这个函数进行筛选,满足lambda x: x%n>0,也就是不能被整除,才是True,不会在筛选时被剔除。筛选用的是filter,此时把it中所有3的倍数(包括3,因为3一开始就输出过了)都删去,然后开始下一个循环。下一个循环的开始,it中的第一个数字是5,yield会输出5,接着删去5的倍数,不断循环,最后剩下的都是素数了。
emmm不知道我的思路对不对
filter()
把传入的函数依次作用于每个元素
我的理解是:
第一个例子,filter的第一个参数直接写了函数名,没有写这个函数需要的参数,filter就会用这个函数名对应的函数进行筛选,把迭代器的每个元素作为参数传入函数
第二个例子,filter的第一个参数的函数名加了参数,filter就不会用not_odd这个函数进行筛选,而是用这个函数里面的匿名函数,并把迭代器的每个元素作为这个匿名函数的参数进行筛选
我也是猜的,不过这样对于我来说似乎比较好理解且合理
- 1
用户7192832094
第一个例子是这样的
这时是把list中的每一项当做n输入进is_odd函数中进行运算
第二个例子是这样的
这时确是把list里的每一项当做not_odd里的x进行运算
如何确认每一项会被代入到哪里?还是见缝插针?
可能我的意思表达不清楚,学的晕晕乎乎的。