если/еще и if/elseif

После некоторого просмотра график должен быть обновлен. Поскольку у меня еще не было контрольных точек обучения, я успешно обновил график, экспортировав из ранее замороженного графика в качестве контрольной точки. python3 export_inference_graph.py --input_type image_tensor --pipeline_config_path FROZENGRAPHDIRECTORY/pipeline.config --trained_checkpoint_prefix FROZENGRAPHDIRECTORY/model.ckpt --output_directory FROZENGRAPHDIRECTORY_tfNEWTFVERSION

6
задан sharptooth 16 March 2009 в 12:24
поделиться

7 ответов

Ситуация a:

if( condition )
{
}
else
{
}

Когда условие в вышеупомянутом операторе еще будет ложью, затем операторы в, блок будет всегда выполняться.

Ситуация b:

if( condition )
{
}
else if( condition2 )
{
}
else
{
}

Когда 'условие' еще является ложью, затем операторы в, если блок будет только выполняться, когда condition2 будет верен. Операторы в еще блок будет выполняться, когда condition2 будет ложью.

14
ответ дан 8 December 2019 в 02:11
поделиться

Без "elseif" синтаксиса необходимо было бы записать цепочечные операторы "if" для обработки одного из нескольких возможных результатов этот путь:

if( str == "string1" ) {
   //handle first case
} else {
    if( str == "string2" ) {
       //handle second case
    } else {
       if( str == "string3" ) {
           //handle third case
       } else {
          //default case
       }
    }
 }

вместо этого можно записать

if( str == "string1" ) {
   //handle first case
} else if( str == "string2" ) {
   //handle second case
} else if( str == "string3" ) {
   //handle third case
} else {
   //default case
}

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

21
ответ дан 8 December 2019 в 02:11
поделиться

Много языков имеют grammer как это (здесь: Спецификация языка ECMAScript, таким образом, JavaScript):

IfStatement:
    if ( Выражение ) Оператор else Оператор
    if ( Выражение ) Оператор

Оператор:
    Блок
    VariableStatement
    EmptyStatement
    ExpressionStatement
    IfStatement
    IterationStatement
    ContinueStatement
    BreakStatement
    ReturnStatement
    WithStatement
    LabelledStatement
    SwitchStatement
    ThrowStatement
    TryStatement

Блок:
    { StatementListopt }

StatementList:
    Оператор
    Оператор StatementList

Таким образом, ответвления оператора "if" могут содержать блок операторов (Блок) или один из других операторов (кроме Блока). Это означает, что это допустимо:

if (expr)
    someStatement;
else
    otherStatement;

И поскольку StatementList может просто содержать отдельного оператора, эти примеры эквивалентны предыдущему:

if (expr) {
    someStatement;
} else {
    otherStatement;
}

if (expr)
    someStatement;
else {
    otherStatement;
}

if (expr) {
    someStatement;
} else
    otherStatement;

И когда мы заменяем otherStatement дополнительным IfStatement мы получаем это:

if (expr) {
    someStatement;
} else
    if (expr) {
        someOtherStatement;
    }

Остальное - просто форматирование кода:

if (expr) {
    someStatement;
} else if (expr) {
    someOtherStatement;
}
3
ответ дан 8 December 2019 в 02:11
поделиться

else if в основном средства else часть if другой if оператор.

2
ответ дан 8 December 2019 в 02:11
поделиться

Учитывая единственную переменную, Вы будете использовать простое if-else структура. Когда существует несколько переменных, и у Вас есть другой путь для выполнения для различных возможностей, Вы будете использовать if-else if-...-else. Обратите внимание на то, что последний также заканчивает else оператор.

0
ответ дан 8 December 2019 в 02:11
поделиться

Подчеркивание, что сказал Gumbo.

Кроме того, если язык имеет реальный elif / elsif / elseif (еще скажите, "реальное" - если инструкция, вместо своего рода вложенного объединения в цепочку, скрытого путем форматирования), то компилятор может easly испускать единственный узел в Абстрактном синтаксическом дереве (или подобный, видеть http://en.wikipedia.org/wiki/Abstract_syntax_tree) вместо вложения их.

Дать пример:

Скажите в C/C++, который Вы имеете:

if (a) {
    X
} else if (b) {
    Y
} else if (c) {
    Z
} else {
    0
}

Затем компилятор создаст узел AST как это:

   a
  / \
 X   b
    / \
   Y   c
      / \
     Z   0

Но если предпочтительный язык имеет реальное если еще:

if (a) {
    X
} elif (b) {
    Y
} elif (c) {
    Z
} else {
    0
}

Затем AST мог более легко быть похожим на это:

   (a--b--c)
   /  /  /  \
  X  Y  Z    0

На таком языке, "если еще" только было бы возможно, если фигурные скобки не обязательны:

if (a) {
    X
} elif (b) {
    Y
} else if (c) {  // syntax error "missing braces" if braces mandatory
    Z
} else {
    0
}

Соответствующий AST (если фигурные скобки не обязательны):

   (a--b)
   /  /  \
  X  Y    c
         / \
        Z   0

Это могло сделать CFG-анализ (http://en.wikipedia.org/wiki/Control_flow_graph) легче реализовать (хотя не могло бы быть никакого фактического преимущества оптимизации; так, по моему скромному мнению, это просто принесло бы пользу ленивому программисту :D).

3
ответ дан 8 December 2019 в 02:11
поделиться

Вы уже дали ответ сами. если/еще для истинного/ложного результата, как int=2 или любое другое возможное международное значение, и if/elseif больше чем для 2 результатов, как int=2 и int=3 и так далее.

Также это группирует контекст переменной. Вы могли проверить каждый результат как

if (a == 2) { do one thing };
if (a == 3) { do another thing };
...
if (a != 2 && a != 3 ...) { do something else };

С if/else/elseif это лучше читаемый.

0
ответ дан 8 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: