有没有len(someObj)不调用someObj __len__
函数的情况?
我最近用(成功的)努力将前者替换为后者以加速某些代码.我想确保在某些地方len(someObj)与someObj不同的边缘情况.__len__
().
如果__len__
返回一个长度sys.maxsize
,len()
将引发异常.__len__
直接打电话不是这样.(事实上__len__
,除非经过,否则你可以返回任何不会被捕获的物体len()
.)
你看到了什么样的加速?我无法想象它是否引人注目?
来自http://mail.python.org/pipermail/python-list/2002-May/147079.html
在某些情况下没有区别,但出于几个原因使用len()是首选.
首先,不建议
__methods__
自己调用它们,它们应该被python的其他部分使用.
len()
将在任何类型的序列对象的工作(lists
,tuples
,和所有).__len__
只能使用__len__
方法在类实例上工作.
len()
将在没有长度的对象上返回更合适的异常.