условно устанавливая и условно используя переменную python - PullRequest
2 голосов
/ 11 августа 2010

Я знаю, что условно объявлять переменную плохое соглашение / дизайн.то есть:

if some_boolean:
   x = 1

, где x нигде не объявлено.Но плохо ли условно объявлять переменную, если вы используете ее позже, только если это условие выполнено?

if some_boolean and some_other_boolean:
   x+=1

Ответы [ 3 ]

2 голосов
/ 11 августа 2010

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

1 голос
/ 11 августа 2010

если ваш код выглядит следующим образом

if some_boolean:
   x = 1
# some actions
# not changing some_boolean
# but calculating some_other_boolean
# ...
if some_boolean and some_other_boolean:
   x+=1

Можно ли изменить его на

def some_actions(some_args,...):
#...
def calculate_some_other_boolean(some_other_args,...):
#...
if some_boolean:
    x = 1
    some_actions(some_args,...)
    if calculate_some_other_boolean(some_other_args,...):
        x+=1
else:
    some_actions(some_args,...)

?

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

С очень простой точки зрения дизайна, я бы просто по умолчанию установил логическое значение false, даже если он, возможно, не будет использоваться позже.Таким образом, рассматриваемое логическое значение не определено , может быть или , может быть , фактически является логическим значением, и в случае использования оно имеет правильное значение.

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

...