作为我的宠物项目的一部分,我需要在Python中测试我的代码的各种不同实现的性能。我预计这将是我做的很多事情,我想尝试使我编写的代码尽可能易于更新和修改。
目前它还处于起步阶段,但我已经开始使用字符串来管理常见的设置或测试代码,例如:
naiveSetup = 'from PerformanceTests.Vectors import NaiveVector\n' \
+ 'left = NaiveVector([1,0,0])\n' \
+ 'right = NaiveVector([0,1,0])'
这使我只能编写一次代码,但代价是更难以阅读和笨拙地更新。
有更好的方法吗?
答案 0 :(得分:3)
使用三重引号“”“
setup_code = """
from PerformanceTests.Vectors import NaiveVector
left = NaiveVector([1,0,0])
right = NaiveVector([0,1,0])
"""
timeit
的文档中提供了另一种有趣的方法:
def test():
"Stupid test function"
L = []
for i in range(100):
L.append(i)
if __name__=='__main__':
from timeit import Timer
t = Timer("test()", "from __main__ import test")
print t.timeit()
虽然这不适合所有需要。
答案 1 :(得分:0)
时间码很好,但它仍会让你猜测发生了什么。
要了解实际发生的情况,请在调试器中手动暂停几次,然后检查调用堆栈。
例如,在一个实现中比另一个实现慢30倍的代码中,堆栈的每个样本在其花费的额外时间内有96.7%的可能性下降,因此您可以看到原因。
无需猜测。