甜萝 发表于 2022-2-23 20:15

如何理解python中用filter求素数

# 用filter求素数 代码部分无法理解
def _odd_iter():
    n = 1
    while True:
      n = n + 2
      yield n
# 定义一个函数 变量 n = 1, 条件始终为真, 变量n等于自身加2 返回3 遇到yield关键字 程序停止执行 这是一个无限序列
def _not_divisible(n):
    return lambda x: x % n > 0
# 这也是一个函数 不过 这个函数我无法理解 返回的是一个匿名函数 x 传入一个形参n x除以n的余数要大于零 才返回x
def primes():
    yield 2
    it = _odd_iter() # 初始序列
    while True:
      n = next(it) # 返回序列的第一个数
      yield n
      it = filter(_not_divisible(n), it) # 构造新序列
# 这是第三个函数 返回2 程序停止执行 将第一个函数 _odd_iter(): 赋给it 进入while循环 用next函数把it计算出来 n等于5 返回5 程序停止执行
# 最后一行看不太懂 filter是将第一个参数作用到参数it中的每个元素上 根据返回结果是True还是False 来选择是否保留 但是还是无法理解最后一行
# https://www.liaoxuefeng.com/wiki/1016959663602400/1017404530360000 从这里学习的 但是始终无法理解这个求素数的代码。

ID88512 发表于 2022-2-24 00:23

本帖最后由 ID88512 于 2022-2-24 00:27 编辑

第一个函数定义n   第二个函数是传参x在编辑器里应该是赋值了或者调用随机数模块或者字典    然后除以第一个函数判断后返回的值 大于0应该print 一下最后那个是筛选   那个函数里面的商吧    然后又是赋值

哎,要看全部代码才行 东一个函数西一个函数我也整不懂了 哈哈哈将就看吧

ID88512 发表于 2022-2-24 00:31

刚刚去看了 我就就说他有个字典   很好理解 。
你去百度搜搜还有更简单的写法。
Python 很多种写法看自己
页: [1]
查看完整版本: 如何理解python中用filter求素数