For 循环嵌套在 if 语句中。嵌套在 for 循环中的 if 语句

时间:2021-07-24 19:43:49

标签: python performance for-loop if-statement

这个问题主要是关于通过切换 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 比较陌生,这是我在这个网站上的第一篇文章,所以我希望我的问题表述得很好且易于理解。

0 个答案:

没有答案