Python默认参数指定列表的长度

2024-10-04 03:20:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个错误,说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]))


Tags: 函数参数len表达式def错误printp2
3条回答

有些语言,如Ruby,允许参数列表引用以前命名的参数。不幸的是,Python没有

您必须在函数体中添加p2 = len(arr) - 1

您可以这样做:

def sumZero_refactor(arr, p1 = 0, p2 = None):
  if p2 == 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]))

这是因为arr尚未定义。但是,在函数代码中定义了arr

您不能使用参数arr,然后为p2变量放置arr,因为arr尚未完全定义

更正代码:

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

相关问题 更多 >