Подтвердить что ты не робот

Python, почему ключевое слово elif?

Я только начал программирование на Python, и мне интересно, о elif ключевое слово.

Другие языки программирования, которые я использовал перед использованием else if. У кого-нибудь есть идея, почему разработчики Python добавили дополнительное ключевое слово elif?

Почему бы и нет:

if a:
    print("a")
else if b:
    print("b")
else:
    print("c")
4b9b3361

Ответ 1

Скорее всего это синтаксический сахар. Как Wend Visual Basic.

Ответ 2

Далеко, как я знаю, это там, чтобы избежать чрезмерного отступа. Вы можете написать

if x < 0:
    print 'Negative'
else:
    if x == 0:
        print 'Zero'
    else:
        print 'Positive'

но

if x < 0:
    print 'Negative'
elif x == 0:
    print 'Zero'
else:
    print 'Positive'

гораздо приятнее.


Благодаря ign для docs ссылка:

Ключевое слово elif является коротким для "else if" и полезно избегать чрезмерного отступа.

Ответ 3

Языки с синтаксисом типа C получают else if бесплатно, не выполняя его вообще.

Причина в том, что в этих синтаксических структурах управления просто работают с следующим оператором, который может быть составным выражением, заключенным в фигурные скобки, если необходимо (например, { x += 1; y += 1 }).

Это означает, что после того, как вы внедрили if и else, else if просто отпадает из грамматики языка, естественно, бесплатно, без каких-либо дальнейших усилий по реализации. Чтобы понять, почему, посмотрите на это:

if (condition) {
    if_body();
} else if (another_condition) {
    else_if_body();
} else {
    else_body();
}

Это выглядит как if с прикрепленными else if и else, каждый из которых применяется к составной инструкции. Но на самом деле это не так. На самом деле это два отдельных оператора if, каждый из которых имеет ровно один случай else; второй оператор if находится внутри тела else первого оператора if.

else if { ... } действительно анализируется как else, применяемый к следующему оператору, который является оператором if (применяется к составному выражению { else_if_body(); }. Затем окончательный else связывается с предыдущим предыдущим if, который является вторым.

Здесь то же самое написано больше в соответствии с тем, как он анализировался 1:

if (condition) {
    if_body();
} else {
    if (another_condition) {
        else_if_body();
    } else {
        else_body();
    }
}

Но оказывается, что если язык непосредственно реализовал else if как первоклассный вариант для операторов if, он будет вести себя точно так же, как второй независимый оператор if внутри else первый! Таким образом, нет необходимости беспокоиться о реализации else if вообще; языковые разработчики бесплатно получают else if с этим стилем синтаксиса, как только они реализовали if и else.

Синтаксис Python не разрешает эту халяву.

Программисты синтаксиса C-стиля могут думать в терминах else if, хотя язык имеет if только с нулевым или одним else, но только потому, что они могут писать код, как мой первый пример, который отформатированный таким образом, который отличается от человеческого читателя, чем с компилятором.

Python, OTOH, использует отступы для указания блочной структуры, что заставляет структуру блоков выглядеть одинаково с человеческим читателем, как и с интерпретатором 2. После того, как вы получили if и else в синтаксисе стиля Python, программисты все еще могли писать код, который ведет себя идентично else-if, помещая второй оператор if внутри else первого. Но это выглядит так:

if condition:
    if_body()
else:
    if another_condition:
        else_if_body()
    else:
        else_body()

Это выглядит уродливым и гораздо сложнее думать в терминах, чем цепочка else-if, когда вы получаете более 1 или 2 else-ifs. Поэтому стоит добавить явную функцию языка, чтобы вернуть способность мыслить в терминах else-if. Даже при том, что это технически делает язык более сложным, он фактически делает мышление с точки зрения языка более простым, так что это хорошая сложность; с созданной вручную цепочкой вложенных if внутри else читателю необходимо вручную прочитать весь код и убедиться, что каждый else кроме последнего содержит ровно один оператор if и ничего другого, чтобы сделать вывод о том, что целая последовательность эквивалентна линейной цепочке условий, проверенных по порядку, с некоторым кодом для выполнения первой проверки, которая преуспевает.

Итак, тогда. Мы видели, что языки с синтаксисом C-типа также можно использовать с else if, потому что они получают его бесплатно. Это причина, почему это существует. Языки с синтаксисом типа Python должны явно делать что-то, чтобы получить конструкцию, которая может использоваться как else-if. Почему они выбрали elif? Это произвольно; вам придется фактически спросить людей, которые приняли решение.

Однако Python не изобрел elif, он был на других языках задолго до того, как существовал Python. Поэтому я бы предположил, что когда им пришлось реализовать явную конструкцию else-if, они просто выбрали тот, с которым уже знакомы программисты.


1 Технически, именно так люди, которые ДЕЙСТВИТЕЛЬНО серьезно относятся к использованию брекетов с контрольными структурами, должны написать свой код.;)

2 Вы можете, конечно, создать для этого контр-примеры, но это общая идея синтаксиса на основе отступа.

Ответ 4

Чтобы избежать скобки ^ H ^ H ^ H ^ H ^ Помогите, если война.

В C/С++, где у вас есть else if, вы можете структурировать свой код во многих разных стилях:

if (...) {
    ...
} else if (...) {
    ...
}


if (...) {
    ...
} 
else if (...) {
    ...
}

if (...) {
    ...
} else 
if (...) {
    ...
}

// and so on

имея вместо этого elif, такой войны никогда не произойдет, так как существует только один способ написать elif. Кроме того, elif намного короче else if.

Ответ 5

Это так, как есть. Javascript использует else if, php использует elseif, perl использует elsif, препроцессор C и питон используют elif. Ни один из них не ошибается, они просто выбирают немного другой синтаксис, чтобы делать то же самое.: D

Ответ 6

Я нахожу их полезными, чтобы помочь отличить "else-if" от "final else".

Ответ 7

elif - это своего рода замена коммутатора на других языках, но с большей мощностью

например, в C вы пишете

switch (number){
 case 1:
   doA()
   break;
 case 2:
   doB()
   break;
 case N:
   doN()
   break;
 default:
   doSomethingElse()
   break;
}

в Python вы пишете

if number == 1: doA()
elif number == 2: doB()
elif number == N: doC()
else: doSomethingElse()

Как вы видите, elif является более мощным, так как вы можете вводить более сложные операторы, чем в коммутаторе, а также избегать вложения инструкций if/else

Ответ 8

Python наследует это от Perl, где он называется elsif.

В случае Python else if, поскольку две отдельные конструкции, подобные этой, в C-подобных языках, будут довольно уродливыми, так как вам нужно иметь else: if: с двумя уровнями отступов.

Возможно ли, что сочетание двух ключевых слов будет лучше (так что else if создать одну конструкцию, например, оператор not in.

PL/SQL также имеет elsif, а препроцессор C имеет значение elif.