我对以下类型的代码有一些问题:
if a == b:
forloop:
CODE_1
k = t # t will be changed in CODE_1 and CODE_2
CODE_2
elif a == c:
forloop:
CODE_1
k = t + 1
CODE_2
正如你所看到的,两个for循环中的代码都非常相似(它们可能只是在几个字符中有一些区别。上面只是一个例子。)现在我想缩短它,因为它们几乎相同
我知道有一种方法可以缩短它:
forloop:
CODE_1
if a == b:
k = t
elif a == c:
k = t + 1
CODE_2
但重点是每个循环,它需要进行比较。我认为它应该比前者慢。事实上,因为a
,b
和c
不会受到for循环的影响,所以不需要在每个循环中对它们进行比较。有人能告诉我如何缩短它而不会让它变慢吗?
我现在正在使用python。
很抱歉没有提供具体的代码,因为我只是对这种情况感到好奇。如果只能在某些特定代码中进行优化,那么如果你能指出它就会很棒。
复制不是解决问题的方法,因为它们仍有一些差异(不只是1个可能是25个位置)。
答案 0 :(得分:1)
如果a == c
,您只需在循环前调用t = t + 1
,并使用相同的代码a
。
如果t
本身在循环期间发生变化,您可以写k = t + dt
,其中dt
已设置为0或1,具体取决于a
的值。
这应该有效,因为正如您在问题中提到的那样:
事实上,因为a,b和c不会受到for循环的影响
最后,也许可以使用dict而不是elif语句。
答案 1 :(得分:0)
概括另一个答案,您可以将比较和其他代码提升出循环。
说a == c
真的很贵 - 也许它们是大矩阵。你可以做点什么
compare = a == c #store comparison
for ... :
if compare:
...
else: ...
您还可以从循环中拉出任何常量的操作和计算。