请教一下,这1000以内素数的代码中,匿名函数的参数怎么没传就可以用?
难道说lambda里的x,可以接收到filter中序列参数的每一项值?
比如n为3时,it序列中5,7,9,11,13,15……。这一串可以依次传入到lambda的x参数中去?
def _odd_iter(): # it生成器,代表从3开始的全体奇数序列。
n = 1
while True:
n += 2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter()
while True:
n = next(it) # 去除第一个数,就是3(是素数)打印出来。
yield n
'''
# 构造一个新序列,就是将已经取出3之后奇数序列,
通过_not_divisible(n)返回的筛选规则,生成一个新的filter迭代器对象。
然后循环n = next(it)取出新对象的第一个数(肯定是素数),后面一直循环。
'''
it = filter(_not_divisible(n), it)
for i in primes():
if i < 1000:
print(i)
else:
break