2014-11-11 2 views
3

Эти два шаблона дают одинаковые результаты. Имеет ли значение, какой из них используется? Зачем?Имеет ли значение использовать `if ... else` или` if ... return; {implicit else} `?

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

IF ... ELSE

if not packages: 
    help('download') 
else:   
    for p in packages: 
     do_download(p) 
     verify_md5(p) 
     etc(p) 

IF ... RETURN; НЕЯВНЫЕ ELSE

if not packages: 
    help('download') 
    return 

for p in packages:    
    do_download(p) 
    verify_md5(p) 
    etc(p) 
+2

Это не имеет большого значения, так или иначе. Тебе решать. –

+1

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

+0

Есть инструменты для измерения охвата кода программ Python, которые работают путем применения кода Python. Чтобы измерить то, что обычно называют «охватом филиалов», им придется подсчитывать, как часто выполнялся условный блок * не * (так часто попадала ветвь 'else'). Наличие явной ветви 'else:' значительно упрощает использование исходного кода для этой цели. –

ответ

6

От The Zen of Python:

Квартира лучше, чем вложенными.

Итак, второй подход более Pythonic.

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

+1

+1 для цитирования zen –

6

Это стиль ... Но я всегда предпочитаю использовать else. Как вы четко указываете в заголовке вопроса, не имея else, он делает его неявным, и я твердо верю в явный код, который легко читать и понимать.

Кроме того, из The Zen of Python

Explicit is better than implicit. 
+7

У нас есть противоречие Дзэн на Питоне!'Явный лучше, чем неявный', но' Flat лучше, чем вложенный' ... BOOOOOM! (Я тоже предпочитаю явное) –

+1

Они видят, что «если и еще» очень легко понять, возвращение является запутывающим и вводящим в заблуждение. Таким образом, я бы придерживался первого –

+1

Я нахожусь на грани выполнения LewisBlack-стиля разглагольствования ... hbbbrrrhhhrr. Как может 'return' быть * запутывающим * или * вводить в заблуждение *? Должно быть что-то принципиально отличное от того, как мы думаем ... –