Python 为什么len(s)的电话这么慢?
根据答案,呼叫Python 为什么len(s)的电话这么慢?,python,string,python-3.x,Python,String,Python 3.x,根据答案,呼叫len(s)的复杂度为O(1)。 那么,为什么在下载的27kb文件上调用它比在1kb文件上调用慢得多呢 27kb 1kb 问题是,此示例在我的开发计算机上运行,这是一台正常工作的pc。应该运行代码的计算机是RaspberryPi,速度慢了几个数量级。在设置阶段尝试将r.text分配给局部变量。它不是一个简单的属性,您正在计时构建值的工作,该值从内部缓存的字节解码到str,而不仅仅是len调用 帽子提示给Martijn Pieters,以获得精确的参考资料 因为你下载了更多的数据,这
len(s)
的复杂度为O(1)。
那么,为什么在下载的27kb文件上调用它比在1kb文件上调用慢得多呢
27kb
1kb
问题是,此示例在我的开发计算机上运行,这是一台正常工作的pc。应该运行代码的计算机是RaspberryPi,速度慢了几个数量级。在设置阶段尝试将
r.text
分配给局部变量。它不是一个简单的属性,您正在计时构建值的工作,该值从内部缓存的字节
解码到str
,而不仅仅是len
调用
帽子提示给Martijn Pieters,以获得精确的参考资料 因为你下载了更多的数据,这需要更多的时间?你期待什么?@spectras:事实上,他们并没有为下载计时。@MartijnPieters>20次27kb的重复,总共是540kb@spectras:很容易复制(对我来说是3.6秒)。
timeit()
的第二个参数是设置,而不是计时测试。@MartijnPieters>好的,我使用定义的字符集进行了测试,所以速度要快得多。我错误地认为text
在下载过程中一直是懒惰的,因此它最终会在定时测试中阻塞。(基本上,stream=True时会发生什么情况)。每次都是将数据从字节解码为Unicode。@MartijnPieters:啊,我将把它添加到答案中。谢谢我一直在寻找代码以获得更完整的答案。请参阅和@user4815162342:是的,因为标题中没有编解码器,所以使用chardet进行统计分析并猜测要使用的编码。每次。@MartijnPieters人们都希望执行分析所需的时间在文本大小上是线性的。考虑到建立分析的时间,在较小的文件上测量较慢的性能(每单位文本)甚至是合理的。
>>> 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
>>> 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