为什么len的这种调用如此缓慢?

时间:2017-03-19 13:49:33

标签: python string python-3.x

根据this回答,调用len(s)的复杂度为O(1)。 那么为什么在下载的27kb文件上调用它比在1kb文件上调用它要慢得多呢?

27KB

>>> timeit.timeit('x = len(r.text)', 'from requests import get; r = get("https://cdn.discordapp.com/attachments/280190011918254081/293010649754370048/Journal.170203183244.01.log")', number = 20)
5.78126864130499

1KB

>>> timeit.timeit('x = len(r.text)', 'from requests import get; r = get("https://cdn.discordapp.com/attachments/280190011918254081/293016636288663562/Journal.170109120508.01.log")', number = 20)
0.00036539355403419904

问题是,这个例子在我的开发机器上运行,这是一台普通的工作电脑。运行代码的机器是RaspberryPi,它的速度要慢几个数量级。

1 个答案:

答案 0 :(得分:7)

尝试在设置阶段将r.text分配给本地变量。它是a lazy property,而不是普通属性,您正在计算构造值的时间,该值从内部缓存的bytes解码为str,而不仅仅是len调用

给Martijn Pieters提供准确的参考资料!