在任何情况下len(someObj)不调用someObj的__len__函数吗?

问题描述 投票:9回答:5

在任何情况下len(someObj)不调用someObj的__len__函数吗?

我最近(以成功的努力)用后者替换了前者,以加速某些代码。我想确保在len(someObj)someObj.__len__()不同的地方没有边缘情况。

python magic-methods
5个回答
11
投票

如果__len__返回的长度超过sys.maxsize,则len()将引发异常。直接调用__len__并非如此。 (实际上,您可以从__len__返回任何对象,除非该对象通过len(),否则不会被捕获。)


10
投票

您看到了哪种提速?我无法想象这很明显吗?


1
投票

我认为答案是,它将始终有效-根据Python文档:


0
投票

只需在其他答案中添加上下文,这是Python 3.6.9中无效的len引发的__len__()异常:


-4
投票

根据Mark Pilgrim的说法,好像没有。 len(someObj)someObj.__len__()相同;

© www.soinside.com 2019 - 2024. All rights reserved.