如何调用包含嵌套函数的函数?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
相关产品推荐
相关产品推荐

