只检查一次循环的语句

时间:2016-01-03 00:43:26

标签: python loops

假设我有以下简单代码:

useText = True

for i in range(20):
    if useText:
        print("The square is "+ str(i**2))
    else:
        print(i**2)

我使用变量useText来控制打印方块的方式。它在运行循环时不会改变,因此每次循环运行时检查它似乎效率低下。有没有办法在循环之前只检查一次useText,然后总是根据结果打印出来?

这个问题经常发生在我身上。在这个简单的情况下,当然没关系,但我可以想象这会导致在更复杂的情况下性能降低。

5 个答案:

答案 0 :(得分:4)

useText在这里完成的唯一区别是格式化字符串。所以把它移出循环。

fs = '{}'
if useText:
    fs = "The square is {}"

for i in range(20):
    print(fs.format(i**2))

(这个假定 useText在循环期间没有改变!在多线程程序中可能不是真的。)

答案 1 :(得分:2)

程序的一般结构是循环一个序列并以某种方式打印结果。

在代码中,这变为

for i in range(20):
    print_square(i)

在循环运行之前,根据print_square变量适当设置useText

if useText:
    print_square = lambda x: print("The square is" + str(x**2))
else:
    print_square = lambda x: print(x**2)

for i in range(20):
    print_square(i)

这样做的好处是不会重复循环结构或检查useText,并且可以轻松扩展以支持在循环内打印结果的其他方法。

答案 2 :(得分:1)

如果您不打算在循环中更改useText的值,可以将其移到for之外:

if useText:
    for i in range(20):
        print("The square is "+ str(i**2))
else:
    for i in range(20):
        print(i**2)

答案 3 :(得分:0)

我们可以将if移到for之外,因为您提到useText没有变化。

答案 4 :(得分:0)

如果你写这样的东西,你需要检查条件,运行代码,移动到下一次迭代,然后重复,每次检查条件,因为你正在运行{的整个身体{1}}循环,包括for语句,每次迭代:

if

如果你写了这样的内容,for i in a_list: if condition: code() 语句 if循环中,你就会检查条件并运行整个{{1} }}仅在条件为真时循环:

for

我认为你想要第二个,因为那个只在开始时检查一次。这样做是因为for语句不在循环内。请记住,循环内的所有内容都在每次迭代中运行。