我在学习8.6.二次阵列二分算法,
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这是通过如果没有检查实现的。
做额外检查比将其直接设置为默认有什么好处?
发布于 2018-08-21 02:44:44
因为还没有定义a。该参数直到函数定义中才存在;其他参数无法看到它。
https://stackoverflow.com/questions/51940797
复制相似问题