如何调用具有嵌套函数的函数?
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)
并立即调用它,并以全范围对象作为参数。该范围对象变为 k
而 n % k
失败。
您尝试使用 filter
中的函数,它需要一个函数作为第一个参数:
res = list(filter(divides(n)(range(1,n)),range(1,n)))
你的意思是:
res = list(filter(divides(n), range(1, n)))
然后 filter
将 divides(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,不检查任何进一步的候选项。
我是嵌套函数的新手,想在下面调用我的函数,我正在尝试使用嵌套函数和过滤器来查找数字是否为质数。下面是我的代码:
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)
并立即调用它,并以全范围对象作为参数。该范围对象变为 k
而 n % k
失败。
您尝试使用 filter
中的函数,它需要一个函数作为第一个参数:
res = list(filter(divides(n)(range(1,n)),range(1,n)))
你的意思是:
res = list(filter(divides(n), range(1, n)))
然后 filter
将 divides(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,不检查任何进一步的候选项。