根据此答案,该调用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,它的速度要慢几个数量级。
尝试r.text
在设置阶段分配给局部变量。它是一个惰性属性,而不是普通属性,并且您正在对构造值的工作进行计时,该值从内部缓存解码bytes
为str
,而不仅仅是len
调用。
向 Martijn Pieters 致敬,以获得准确的参考!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句