цикл цикла python - PullRequest
       9

цикл цикла python

2 голосов
/ 08 марта 2011

Ниже приведен метод в определенном классе, который создает простой калькулятор в 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. Что такое проверка, чтобы быть правдой или ложью? В каком случае это не будет правдой?

Ответы [ 6 ]

4 голосов
/ 08 марта 2011

Это пример занятого ожидания .Эта программа застревает в этом цикле, постоянно проверяя, нажата ли какая-либо кнопка b в self.buttons.В этот момент он прервет ожидание занятости и вернет метку b.

Так что, по сути, он не проверяет что-либо .Это просто ожидание, пока условие не будет выполнено.

При этом ожидание занятости считается антипаттерном .Если у вас есть контроль над этой кодовой базой (и это больше, чем просто тривиальное игрушечное приложение), подумайте над тем, можно ли проверить, можно ли проверить это условие как часть основного цикла большого приложения или объект предоставляет способ, которым это событие можетожидал (скажем, с обратным вызовом или в отдельном потоке).

2 голосов
/ 08 марта 2011

Правда всегда правда.Цикл while будет выполняться вечно до тех пор, пока он не будет завершен «вручную» при выполнении оператора return.

1 голос
/ 08 марта 2011

Механизмы управления, такие как while, if и т. Д., Проверяют логическое значение.Типичная проверка, такая как «a == 5», является либо истинной, либо ложной.Но вы также можете просто ввести «True», и в этом случае условие всегда будет истинным.

Другими словами: «while true» - это бесконечный цикл, и код никогда не останавливается до возврата b.Оператор getLabel () достигнут.

1 голос
/ 08 марта 2011

Существует несколько способов выхода из бесконечного цикла:

  • return выходит из текущей функции (и тем самым все циклы внутри функции)
  • break выходиттолько текущий цикл
  • Любое неперехваченное исключение
  • Кроме того, иногда требуется бесконечный цикл, например, в случае сервера.Вы все еще можете убить его, вызвав sys.exit или аналогичные методы завершения процесса
1 голос
/ 08 марта 2011

Это не тестирование.

while True означает цикл навсегда. Пока циклы пока его выражение не ложно. Правда никогда не ложна.

0 голосов
/ 08 марта 2011

Единственное предложение, которое я мог бы дать, это отправить его в бесконечный цикл, как, он всегда будет прислушиваться к нажатию кнопки. Вам, вероятно, нужно будет написать выход в этом цикле после нажатия кнопки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...