【发布时间】:2021-08-28 17:54:21
【问题描述】:
我收到一条错误消息,提示 p2 的 arr 未定义。如果我将 p2 = len(arr) - 1 表达式移到函数内部,错误就会消失。为什么会出现此错误,如何使此默认参数表达式起作用?
def sumZero_refactor(arr, p1 = 0, p2 = len(arr) -1):
NameError: name 'arr' is not defined
def sumZero_refactor(arr, p1 = 0, 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]))
【问题讨论】:
-
def sumZero_refactor(arr, p1=0, p2=None): p2 = p2 if p2 is not None else len(arr) -
也许OP可以澄清,但关于其他答案,我没有得到需要为
p2传递非默认值的印象,只是设置@987654325参数列表中的 @ 很方便。
标签: python list default-arguments