Discuss / Python / 稍微改写了下素数的代码生成

稍微改写了下素数的代码生成

Topic source

宁康NK

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

def _odd_iter(): n = 1 while True: n = n + 1 yield n

def _not_divisible(n): return lambda x: x % n >0

def primes(): it = _odd_iter() while True: n = next(it) yield n it = filter(_not_divisible(n), it)

这块代码中it永远存的是一个迭代器,第一次它存的是从2开始的所有自然数

filter函数里面,第一个参数接收函数,第二个接收可迭代对象(it就是一个可迭代对象)

_not_divisible(n)不是一个函数,它返回的是一个函数(lambda表达式),所有filter函数作用是将it这个迭代器在lambda表达式中过滤一遍,生成的新的it迭代器

过滤的条件就是,当前it迭代器中所有能被推理出来的数,不能被n整除。


  • 1

Reply