我正在学习 8.6. bisect — 数组平分算法,
bisect.bisect_left(a, x, lo=0, hi=len(a))
的默认值为lo=0, hi=len(a)
,
当我检查源代码发现hi=len(a)
没有直接设置为默认值时,
def bisect_right(a, x, lo=0, hi=None):
if lo < 0:
raise ValueError('lo must be non-negative')
if hi is None:
hi = len(a)
while lo < hi:
mid = (lo+hi)//2
if x < a[mid]:
hi = mid
else:
lo = mid+1
return lo
它是通过 if 检查 none 实现的。
与直接将其设置为默认值相比,进行额外检查有什么好处?
因为a
尚未定义。该参数在函数定义中之前不存在;其他参数看不到它。