Discuss / Python / 素数生成的代码解析

素数生成的代码解析

Topic source

#生成器,生成从3开始的奇数序列

def _odd_iter():

    n = 1

    while True:

        n = n + 2

        yield n

'''

   筛选函数,这样定义的话得传入两次参数,arg1=n,arg2=x,eg: _not_divisible(3)(7)

                                                                         '''

def _not_divisible(n):

    return lambda x: x % n > 0

#生成器

def primes():

    yield 2      #先生成第一个素数2

    it = _odd_iter() # 初始序列

    while True:

        n = next(it) # 返回序列的第一个数

        yield n

        it = filter(_not_divisible(n), it) # 构造新序列,从奇数序列中把能整除n的数据全部筛选出去,每次迭代筛选出一批n的倍数

# 打印1000以内的素数:

for n in primes():

    if n < 1000:

        print(n)

    else:

        break


  • 1

Reply