在 Python 中,您可以将两个参数传递给一个函数,其中一个参数是从另一个参数推断出来的吗?

In Python can you pass two arguments to a function where one argument is extrapolated from the other?

我正在 Python 中编写递归二进制搜索函数。我的代码看起来像函数接受的常见示例:

(a) 数字列表; (b) 搜索词; (c) 右指针初始位置列表的长度;和 (d) 左指针的默认参数 0。

我是否必须同时传递数字列表 (a) 和 列表的长度 (c)?我不能创建一个自动计算参数 (a) 长度的默认参数吗?

MWE:

def binarySearchRecur(nums, target, high, low=0):
    if high - low == 1:
        return "not found"
    elif nums[(high + low) // 2] < target:
        low = (high + low) // 2
        return binarySearchRecur(nums, target, low, high)
    elif nums[(high + low) // 2] > target:
        high = (high + low) // 2 + 1
        return binarySearchRecur(nums, target, low, high)
    return f"index at: {(low + high) // 2}"


target = 16
nums = [x for x in range(20)]
print(binarySearchRecur(nums, target, len(nums)-1))

在上面的代码中,我想第一次调用函数时只使用 numstarget

你能简单地做这样的事情吗?

def binarySearchRecur(nums, target, high=None, low=0):
   if high is None:
      high=len(nums)
...

这样,如果您只输入列表和目标,函数要做的第一件事就是从列表中推断出“high”。