Python 3.x 为什么在这种情况下arr没有定义?

Python 3.x 为什么在这种情况下arr没有定义?,python-3.x,algorithm,sorting,Python 3.x,Algorithm,Sorting,在这种情况下,为什么我不能将数组长度设置为默认参数 def q_helper(arr, start=0, end=len(arr)-1): pivot = arr[start] swapIdx = start for i in range(len(arr)): if pivot > arr[i]: swapIdx += 1 swap(arr, swapIdx, i) swap(arr,

在这种情况下,为什么我不能将数组长度设置为默认参数

def q_helper(arr, start=0, end=len(arr)-1):
    pivot = arr[start]
    swapIdx = start
    for i in range(len(arr)):
        if pivot > arr[i]:
            swapIdx += 1
            swap(arr, swapIdx, i)
        swap(arr, start, swapIdx)
    return swapIdx

简单的回答是:不能基于前面的参数设置默认参数,因为python需要在定义函数时(而不是调用函数时)知道值

一个较长的答案可能是:如果您正在寻找一种有点类似于Python的方式来做您想要做的事情,我建议将默认值设置为
None
,然后如果变量恰好是
None
,则将其设置为您想要的任何值。大概是这样的:

def q_helper(arr, start=0, end=None):
    if end is None:
        end = len(arr) - 1  # if not set, set it to one less than the array's length

可能的副本,如副本中所述,您不能执行此操作。在任何情况下,
end
甚至不在任何地方的函数中使用。