这个问题主要是关于通过切换 if 语句和 for 循环的顺序来优化脚本的性能。 我有一个类似于下面的代码(为了简化目的,我删除了所有不必要的位)。我写了我想到的三个选择。 版本 1:
for rowindex in range(400):
for columnindex in range(10):
exec(f'{something}1 = ...')
if comparisonbool:
exec(f'{something}2 = ...')
版本 2:
for rowindex in range(400):
if comparisonbool:
for columnindex in range(10):
exec(f'{something}1 = ...')
exec(f'{something}2 = ...')
else:
for columnindex in range(10):
exec(f'{something}1 = ...')
版本 3:
if comparisonbool:
for rowindex in range(400):
for columnindex in range(10):
exec(f'{something}1 = ...')
exec(f'{something}2 = ...')
else:
for rowindex in range(400):
for columnindex in range(10):
exec(f'{something}1 = ...')
所以,虽然我发现版本 1 看起来更好,但我想知道版本 2 或 3 是否会带来更好的性能。 我的推理是,在版本 3 中,if 语句 if 只检查一次,然后代码根据其结果运行。在版本 2 中,它被检查了 400 次。在版本 1 中,它被检查了 4000 次
但是,我尝试使用 time.perf_counter() 对其进行计时 [我在循环前后直接运行它并计算了两者之间的差异]。 我为三个版本中的每一个计时 6 次运行,并获得以下平均运行时间:Tv1:0.56s,Tv2:0.50s,Tv3:0.53s 我相信时间上的差异是微不足道的,并且是由随机变量引起的,因为重复我的实验会得到不同的结果(有时 v3 最快,有时 v1 等...)
我的问题是:考虑到微不足道的性能差异,我应该坚持使用第 1 版,还是会因为某种原因将第 2 版或第 3 版视为更“pythonic”?
我尝试通过比较不同的排序选项来搜索讨论此问题的帖子,但找不到任何帖子。 我认为自己对 python 比较陌生,这是我在这个网站上的第一篇文章,所以我希望我的问题表述得很好且易于理解。