首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Break vs Boolean?

Break vs Boolean?
EN

Stack Overflow用户
提问于 2012-12-13 01:08:40
回答 2查看 1.6K关注 0票数 0

我的编程基础老师在她的一节课上说,使用"break“或"continue”关键字比使用布尔值退出循环的效率要低。

我编写并运行了一个用Python编写的程序,看看是不是这样:

代码语言:javascript
复制
import time;

TIMES = 100000000
COMPARE_FROM = "foo"
COMPARE_TO = "roo"

def breakTest() :
    while(True) :
        break;
        if(COMPARE_FROM == COMPARE_TO) :
            boo = "boo"

def booleanTest() :
    running = True;
    while(running) :
        running = False;
        if(running):
            if(COMPARE_FROM == COMPARE_TO) :
                boo = "boo"

def main() :
    breakTimeBefore = 0;
    breakTimeAfter = 0;
    booleanTimeBefore = 0;
    booleanTimeAfter = 0;

    print("running break test ...");

    breakTimeBefore = time.time();
    for i in range(0, TIMES, 1):
        breakTest();
    breakTimeAfter = time.time();

    print("break test complete");
    print("Time: %f seconds \n" % (breakTimeAfter - breakTimeBefore));

    print("running boolean test ...");

    booleanTimeBefore = time.time();
    for i in range(0, TIMES, 1):
        booleanTest();
    booleanTimeAfter = time.time();

    print("boolean test complete");
    print("Time: %f seconds \n" % (booleanTimeAfter - booleanTimeBefore))

    print("---- FINDINGS ----");
    print("breakTest time:   %f" % (breakTimeAfter - breakTimeBefore));
    print("booleanTest time: %f" % (booleanTimeAfter - booleanTimeBefore));
    print("diffrence:        %f" % ((breakTimeAfter - breakTimeBefore) - (booleanTimeAfter - booleanTimeBefore)));
    input("Press enter to close...");

main();

运行三次后,平均结果,我发现breakTest快了6.25秒。

那么,是break关键字更有效呢,还是我的代码错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-13 01:24:27

您的测试并不完全等同。我认为你的老师可能有更多类似以下的想法:

代码语言:javascript
复制
def breakTest():
    i = 0
    while True:
        i += 1
        if i == 10:
            break

def booleanTest():
    i = 0
    while i < 10:
        i += 1

如下所示,将条件放入while语句中,而不是使用if/break确实可以提高性能(并缩短代码):

代码语言:javascript
复制
In [14]: %timeit breakTest()
1000000 loops, best of 3: 999 ns per loop

In [15]: %timeit booleanTest()
1000000 loops, best of 3: 201 ns per loop

请注意,这只是退出循环的不同方法的一个示例,我认为您的老师的意思是这样的。当然,如果您真的在编写这段代码,则应该使用for i in range(11): ...

票数 4
EN

Stack Overflow用户

发布于 2012-12-13 01:29:25

计算机编程入门课程通常会将这样的事情作为真理而不是最佳实践来教你,因为很难说服几乎没有经验的人相信最佳实践是值得努力的。您应该尽量避免使用breakcontinue,但它们满足了无法使用其他机制进行管理或至少无法干净管理的合法用法。对于你第一次学习编程时做的事情,依靠breakcontinue这样的东西往往是懒惰、混乱的解决方案,所以你应该尽量避免它们。到你真正需要它们的时候,你应该有足够的知识和经验来使用你自己的最佳判断。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13844952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档