2010-08-11 4 views
2

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

if some_boolean: 
    x = 1 

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

if some_boolean and some_other_boolean: 
    x+=1 
+2

Я не думаю, что это «плохо» вообще. Я думаю, что это может быть признаком того, что вы должны разделить классы или функции на более мелкие компоненты, но иногда это невозможно. У вас был конкретный случай? – aaronasterling

+0

Это только мой скрипт позволяет пользователю указывать параметры. Это просто зависит от опции, мой сценарий выполняет разные вещи как в начале, так и в конце скрипта. –

+0

Я определенно согласен, что это указывает на плохую модульность кода. Вы знакомы с [SRP] (http://en.wikipedia.org/wiki/Single_responsibility_principle)? Проводка образца вашего кода может помочь нам указать, как это может быть реорганизовано. – Daenyth

ответ

2

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

1

если ваш код выглядеть как этот

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

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

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

Смежные вопросы