在任何情况下len(someObj)
不调用someObj的__len__
函数吗?
我最近(以成功的努力)用后者替换了前者,以加速某些代码。我想确保在len(someObj)
与someObj.__len__()
不同的地方没有边缘情况。
如果__len__
返回的长度超过sys.maxsize
,则len()
将引发异常。直接调用__len__
并非如此。 (实际上,您可以从__len__
返回任何对象,除非该对象通过len()
,否则不会被捕获。)
您看到了哪种提速?我无法想象这很明显吗?
我认为答案是,它将始终有效-根据Python文档:
只需在其他答案中添加上下文,这是Python 3.6.9中无效的len
引发的__len__()
异常:
根据Mark Pilgrim的说法,好像没有。 len(someObj)
与someObj.__len__()
相同;