Избегайте заявления ЕСЛИ после выполнения условия - PullRequest
5 голосов
/ 26 марта 2010

У меня есть операция деления внутри цикла, которая повторяется много раз. Так получилось, что в первые несколько проходов через цикл (более или менее первые 10 циклов) делитель равен нулю. После получения значения ошибка деления на ноль больше невозможна.

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

Как это должно быть закодировано? в Python?

Ответы [ 3 ]

9 голосов
/ 26 марта 2010

Не волнуйся. if (a != 0) дешево.

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

6 голосов
/ 26 марта 2010

Я бы обернул твой вызов в try / кроме блоков. Они очень дешевы в python и стоят примерно столько же, сколько и оператор pass, если исключение не выдается. Python разработан таким образом, что вы должны совершать звонки и анализировать любые ошибки, а не всегда спрашивать разрешение.

Пример кода:

def print_divide(x,y):
    try:
        print x/y
    except ZeroDivisionError:
        pass
1 голос
/ 26 марта 2010

Я с Тило: я думаю, что это должно быть довольно дешево.

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

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