Python中的while循环问题

2 投票
6 回答
1975 浏览
提问于 2025-04-16 13:16

下面是一个在特定类中创建简单计算器的方法,使用的是Python语言。这个方法的目的是等待用户点击一个按钮,并返回那个按钮的标签:

def getButton(self):
    while True:
        p = self.win.getMouse()
        for b in self.buttons:
            if b.clicked(p):
                return b.getLabel()

这里的self.buttons变量是一个包含所有计算器按钮的列表。Clicked是一个方法,用来检查按钮是否被点击。我不太明白的是“while True”这个循环。它在测试什么是真,什么是假?在什么情况下它不会是真的呢?

6 个回答

1

有几种方法可以退出一个无限循环:

  • return 可以退出当前的函数,这样就会退出函数里面的所有循环。
  • break 只会退出当前的循环。
  • 任何未处理的异常也会导致退出。
  • 另外,有时候你可能需要一个无限循环,比如在服务器的情况下。不过你仍然可以通过调用 sys.exit 或类似的方法来结束这个循环。
2

“真”这个词永远都是“真”。这个循环会一直运行下去,直到我们手动让它停止,也就是执行到返回语句的时候。

4

这是一个“忙等待”的例子。这个程序会一直在一个循环里转,永远检查是否有任何按钮 bself.buttons 中被点击。只有在某个按钮被点击后,它才会跳出这个忙等待,返回 b 的标签。

所以,简单来说,它并不是在测试什么,而只是等着某个条件成立。

不过,忙等待被认为是一种“反模式”。如果你能控制这段代码(而且这不仅仅是个简单的玩具应用),可以考虑看看这个条件是否可以作为更大应用主循环的一部分来检查,或者这个对象是否提供了某种方式可以等待这个事件(比如,通过回调函数,或者在一个单独的线程中)。

撰写回答