【发布时间】:2023-04-17 08:38:02
【问题描述】:
我在 Debian Stretch 中使用 python 3.5 对此进行了测试。
我尝试了基准测试the "Avoiding dots" optimization。
正如所料,the "Avoiding dots" optimization 确实快得多。
出乎意料的是,timeit 将较慢的代码报告为较快的代码。
是什么原因?
$ time python3 -m timeit -s "s=''" "s.isalpha()"
10000000 loops, best of 3: 0.119 usec per loop
real 0m5.023s
user 0m4.922s
sys 0m0.012s
$ time python3 -m timeit -s "isalpha=str.isalpha;s=''" "isalpha(s)"
1000000 loops, best of 3: 0.212 usec per loop
real 0m0.937s
user 0m0.927s
sys 0m0.000s
【问题讨论】:
-
在这种情况下这是意料之中的:
isalpha(s)与s.isalpha()所做的工作量相同,您可以在检查字节码时进行验证。只有当您可以避免整个操作时,“避免点”才有帮助。在这里,您可以权衡属性查找的参数。 -
换句话说,
timeit不会说谎。如果它说某事没有更快,那么它就没有更快;) -
@zvone。除非这是你的第一次跑步
-
@L3viathan 如果他们做同样多的工作,那为什么一个几乎是另一个的两倍?
-
这里的“避免点”优化应该是
s=''; f=s.isalpha,然后是f(),实际上在我的测试中速度是原来的两倍。
标签: python timeit debian-stretch