根据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,它的速度要慢几个数量级。
答案 0 :(得分:7)
尝试在设置阶段将r.text
分配给本地变量。它是a lazy property,而不是普通属性,您正在计算构造值的时间,该值从内部缓存的bytes
解码为str
,而不仅仅是len
调用
给Martijn Pieters提供准确的参考资料!