如何调用具有嵌套函数的函数?

How do I call a function that has a nested function?

我是嵌套函数的新手,想在下面调用我的函数,我正在尝试使用嵌套函数和过滤器来查找数字是否为质数。下面是我的代码:

def divides(n):
    def div(k):
        return n % k == 0
    return div

def prime(n):
    cnt=0
    res = list(filter(divides(n)(range(1,n)),range(1,n)))
    for i in res:
        if i==True:
            cnt+=1
    if cnt == 2:
        return ("It is a prime")
    else:
        return ("It is not a prime")

print(prime(5))

所以它抛出类型错误,因为我试图将 1 到 n 的数字作为范围发送到嵌套函数。我怎样才能用两个值调用这个函数?调用嵌套函数的正确方法是什么?

您的 divides(n)(range(1,n)) 创建了函数 divides(n) 并立即调用它,并以全范围对象作为参数。该范围对象变为 kn % k 失败。

您尝试使用 filter 中的函数,它需要一个函数作为第一个参数:

res = list(filter(divides(n)(range(1,n)),range(1,n)))

你的意思是:

res = list(filter(divides(n), range(1, n)))

然后 filterdivides(n) 返回的函数应用于该范围内的每个数字。对于您的 n = 5,您会得到 res = [1],该范围内 5 的唯一除数。

你用 res 做的事情也有问题,看起来你应该使用 range(1, n+1),因为你试图找出是否恰好有两个除数。只需检查 len(res) == 2 即可。

或者不是将所有除数收集到一个列表中然后计数,您可以只检查是否有任何除数:

def prime(n):
    if any(filter(divides(n), range(2, n))):
        return ("It is not a prime")
    else:
        return ("It is a prime")

更简单,并且具有能够提前停止的额外好处。例如,prime(1000) 只检查到 2,不检查任何进一步的候选项。