Стиль Python: операторы if и логическая оценка - PullRequest
7 голосов
/ 10 июня 2010

Одна из идей философии дизайна Python: «Должен быть один ... очевидный способ сделать это». (PEP 20) , но это не всегда может быть правдой. Я конкретно имею в виду (простые) операторы if и логическую оценку. Учтите следующее:

if words:
    self.words = words
else:
    self.words = {}

против

self.words = words or {}

С такой простой ситуацией, которая предпочтительнее, если говорить стилистически? В более сложных ситуациях можно было бы выбрать оператор if для удобства чтения, верно?

Ответы [ 3 ]

9 голосов
/ 10 июня 2010

«Там должен быть только один» вполне может всегда быть правдой;это положительное утверждение «там есть только один», который не может быть - «должен» подразумевает цель, цель, а не возможность ее достижения (например, для чисел a и bЗапрещение либо b + a, либо a + b было бы настолько абсурдным, что в данном случае просто не может быть разумно "только один путь"в достаточно простых случаях (четыре строки для выполнения того, что можно сделать в одной четкой и читаемой строке - пустая трата вертикального пространства), но не для предиката какой-либо значительной сложности.Решить, что имеет «существенную сложность», - это, конечно, суждение.

2 голосов
/ 10 июня 2010

В этом случае я бы сказал «Явное лучше, чем неявное».

Когда кто-то читает ваш код, он может сделать несколько предположений.Они могут предположить, что «слова» могут быть либо пустым, либо словесным с данными в нем (пропуская случай, когда их нет). В этом случае у них может возникнуть соблазн оптимизировать ваш код.Они могут даже сделать это правильно, если нигде не указано, что вы можете получить значение None.

Если «слова» на самом деле могут быть None, я бы попытался прояснить это:

self.words = words
if words is None:
    self.words = {}

Или, возможно, сначала вместо безусловного присваивания.В любом случае, таким способом вы как бы документируете тот факт, что None является ожидаемым значением для «слов».

0 голосов
/ 10 июня 2010

(Edited)
хорошо в случае как ниже, я голосую за условное выражение

def somesuch(self, words=None):
    self.words = words or {}
    ...

конечно, если вы думаете, что это улучшит читабельность (вы можете прочитать это вслух?), Вы можете попробовать

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