Булевы функции: операторы if или простой возврат - PullRequest
1 голос
/ 29 августа 2010

Я проверял код друга, и этот шаблон довольно часто появлялся всякий раз, когда он писал функции, возвращающие логическое значение:

def multiple_of_three(n):
    if (n % 3) is 0:
       return True
    else:
       return False

Я утверждаю, что проще (и, возможно, немного быстрее) написать:

def multiple_of_three(n):
    return (n % 3) is 0

Верно ли, что вторая реализация быстрее? Кроме того, это менее читабельно или как-то осуждается?

Ответы [ 3 ]

3 голосов
/ 29 августа 2010

Я не могу говорить о точном поведении интерпретатора Python, но такое поведение по отношению к другому (на любом языке) просто по причинам "быстрее" ошибочно и квалифицируется как "преждевременная оптимизация».Как сказал Пол Томблин в другом ответе, разница в скорости, если таковая имеется, весьма незначительна.Однако обычная практика диктует, что вторая форма в этом случае более читаема.Если выражение неявно логическое, то оболочка оператора if несерьезна.

См. Также http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize

3 голосов
/ 29 августа 2010

Я очень сомневаюсь, что есть компилятор или интерпретатор, где есть существенная разница в скорости - большинство из них генерируют одинаковый код в обеих ситуациях. Но ваш метод «прямого возврата», на мой взгляд, более понятен и более понятен.

0 голосов
/ 29 августа 2010

Вторая форма является предпочтительной формой.По моему опыту первая форма обычно является признаком неопытного программиста (и это относится не только к Python - это встречается в большинстве языков).

...