Ωme*_*ega 18 python python-internals
在Python中,len是一个通过调用对象的__len__方法来获取集合长度的函数:
def len(x):
return x.__len__()
Run Code Online (Sandbox Code Playgroud)
所以我希望直接呼叫__len__()至少能够达到最快速度len().
import timeit
setup = '''
'''
print (timeit.Timer('a="12345"; x=a.__len__()', setup=setup).repeat(10))
print (timeit.Timer('a="12345"; x=len(a)', setup=setup).repeat(10))
Run Code Online (Sandbox Code Playgroud)
但使用上述代码进行测试的结果显示len()更快.为什么?
Mar*_*ers 37
内置len()函数不会查找.__len__属性.它查找tp_as_sequence指针,而指针又具有sq_length属性.
.__len__内置对象的属性间接映射到同一个插槽,而间接(加上属性查找)需要花费更多时间.
对于Python定义的类,该type对象.__len__在sq_length请求时查找该方法.
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |