缺少参数和类型错误

时间:2017-10-17 03:17:12

标签: python python-3.x

我被指示运行当前代码并理解错误消息并仅更改函数的一行 bs 并修复错误我可以理解错误消息的内容,但是我不知道怎么做 修复它或在函数bs

中发生实际问题的地方
def bs(L, item, left, right):
    if right is None:
        right = len(L)
    if right - left == 0:
        return False
    if right - left == 1:
        return L[left] == item
    median = (right + left)//2
    if item < L[median]:
        return bs(L, item, left, median)
    else:
        return bs(L, item, median, right)

L = [i for i in range(10)]
for i in range(20):
    print(bs(L, i))

错误如下

    print(bs(L, i))
    TypeError: bs() missing 2 required positional arguments: 'left' and 'right'

1 个答案:

答案 0 :(得分:1)

修改

只需为参数指定默认值:(感谢 trentcl

def bs(L, item, left = 0, right = None):
...

编辑前

如果要调用bs(L, i)之类的函数,则需要在函数中使用默认值。默认情况下,left必须为0且right必须为len(L),但据我所知,您无法在函数定义中执行此操作。改变这些行:

sentinel = object()
def bs(L, item, left = 0, right = sentinel):
    if right is sentinel:
        right = len(L)
...

Sentinel像往常一样用作标志或虚拟数据。 Here就是一个例子。如果它让您感到困惑并且您不想使用它,只需使用像-1这样的特殊整数:

def bs(L, item, left = 0, right = -1):
    if right is -1:
        right = len(L)
...