在我最近研究Python中的一个数学问题时,我遇到了一些有关平分库中bisect.bisect_left
函数的行为的困惑.这种混乱是由于它的similarity与库中的另一个功能(即bisect.insort_left
)而产生的.
在我的特定用例中,我使用了自定义键函数(例如bisect.insort_left(my_list, my_item, key=my_key)
),其行为符合预期.此函数使用指定的键为my_list
中的my_item
确定适当的索引,并相应地插入它.
然而,当try 使用bisect.bisect_left(my_list, my_item, key=my_key)
进行类似操作时,我遇到了意外的TypHelp:"其他参数必须是K实例".此错误消息对潜在问题缺乏明确性.
在调查source code of bisect后,我发现了正确的使用模式,如源代码的第71行所示.很明显,正确的用法包括以项作为参数调用键函数,例如:bisect.bisect_left(my_list, my_key(my_item), key=my_key)
.
我对这一要求背后的设计决策感到好奇.与bisect.insort_left
中更直接的使用相比,为什么使用bisect.bisect_left
时需要呼叫my_key(my_item)
?