Python在循环前评估ifs

时间:2018-08-03 08:20:20

标签: python loops for-loop if-statement evaluate

def fun(x):
    for k in range(10):
        found = False
        if x < 12 and other(k):
            dostuff()
            found = True
        if x == 4 and other2(k):
            dostuff()
            found = True

        if not found:
            dootherstuff(k)

我有这个代码。我的问题是,由于x不变,是否可以事先评估这些if语句?

该代码应执行以下操作:

 def fun(x):
    if x == 4:
        for k in range(10):
            if other2(k):
               dostuff()
            else:
               dootherstuff(k)

    if x < 12:
       for k in range(10):
            if other(k):
               dostuff()
            else:
               dootherstuff(k)

def fun(x):
    for k in range(10):
        if x == 4 and other2(k) or x < 10 and other(k):
           dostuff()
         else:
           dootherstuff(k)

但是由于这两个都是非常干燥且丑陋的,所以我想知道是否有更好的选择。在我的真实代码中,我有更多的语句,但是我只需要对X的某些值进行循环中的特定检查,并且我不想每次迭代都检查X,因为它不会改变。

2 个答案:

答案 0 :(得分:0)

认为这应该相同:

 def fun(x):
    for k in range(10);
        if x < 12 and other(k):
           dostuff()
        elif x == 4 and other2(k):
           dostuff()
        else:
           dootherstuff(k)

答案 1 :(得分:0)

您可以执行以下操作

def fun(x):
    cond1 = x < 12
    cond2 = x == 4


    for k in range(10):
        found = False
        if cond1 and other(k):
            dostuff()
            found = True
        if cond2 and other2(k):
            dostuff()
            found = True

        if not found:
            dootherstuff(k)