You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用包含嵌套函数的函数?Python素数判断实现报错咨询

错误原因排查
  • 你代码的报错核心出在divides(n)(range(1,n))这一行:divides(n)执行后会返回内部定义的div函数,这个函数仅支持传入单个整数类型的参数k,你直接传入整个range对象进行取模运算,类型不匹配触发类型错误。
  • 额外逻辑漏洞:你原本遍历的range(1,n)是左闭右开区间,不包含n本身,就算参数传递正常,也永远找不到因子n,计数无法达到2,素数判断会全部错误。
嵌套函数的正确调用方式

你实现的这种外层函数传参后返回内层函数的结构属于闭包,调用规则如下:

  • 单次传入所有参数执行:格式为外层函数(外层参数)(内层参数),比如要判断2是否可以整除5,调用写法为divides(5)(2),直接返回布尔值False。
  • 先固定外层参数复用内层函数:可以先把外层函数执行结果赋值给变量,后续重复调用内层函数,比如:
div_5 = divides(5)
print(div_5(1)) # 输出True
print(div_5(5)) # 输出True
filter结合闭包的正确实现

filter的第一个参数要求是接收单个入参的判断函数,你直接传入divides(n)返回的内层div函数即可,filter会自动把后续迭代器的每个元素传入div做判断,修正后的完整代码如下:

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

def prime(n):
    # 遍历范围调整为1到n(包含n)才能拿到两个因子
    factor_list = list(filter(divides(n), range(1, n+1)))
    return "It is a prime" if len(factor_list) == 2 else "It is not a prime"

print(prime(5))

运行后输出结果为It is a prime,符合预期。

内容的提问来源于stack exchange,提问作者Swayam Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 08:24:04