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

Python函数默认参数设为len(arr)-1报NameError的原因及解决方法

报错原因

Python函数的默认参数求值时机为函数定义阶段,而非函数调用阶段。当解释器解析def语句完成函数定义时,会立刻计算所有默认参数表达式的结果并固化存储,此时参数列表中的arr仅为未绑定实际值的形参标识,并未在当前作用域生成可访问的变量,因此len(arr) - 1执行时会抛出NameError。

默认参数定义完成后,函数内部的代码只会在每次函数被调用时才执行,此时arr已经被传入了实际参数值,作用域内可正常访问,因此将计算逻辑移入函数内不会报错。

修复方案

使用None作为默认占位符,在函数内部判断后再计算p2的默认值即可,修改后的代码如下:

def sumZero_refactor(arr, p1 = 0, p2 = None):
    if p2 is None:
        p2 = len(arr) - 1
    while p1 < p2:
        if arr[p1] + arr[p2] == 0:
            return [arr[p1], arr[p2]]
        elif arr[p1] + arr[p2] < 0:
            p1 += 1
        else:
            p2 -= 1


print(sumZero_refactor([-3, -2, -1, 0, 1, 2, 3]))
print(sumZero_refactor([-2, 0, 1, 3]))
print(sumZero_refactor([1, 2, 3]))
print(sumZero_refactor([-8, -7, -5, -2, 0, 1, 2, 3, 4, 5, 6]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:06:02