Program Tip

파이썬, 왜 elif 키워드일까요?

programtip 2020. 12. 13. 10:28
반응형

파이썬, 왜 elif 키워드일까요?


방금 Python 프로그래밍을 시작했고 elif키워드 에 대해 궁금 합니다.

사용하기 전에 사용했던 다른 프로그래밍 언어 else if. Python 개발자가 추가 elif키워드를 추가 한 이유를 아는 사람이 있습니까?

왜 안 되는가 :

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

아마도 그것은 통사론 적 설탕 일 것입니다. Wend의 Visual Basic.


내가 아는 한, 과도한 들여 쓰기를 피하기 위해 있습니다. 당신은 쓸 수 있습니다

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 에게 감사드립니다 .

이 키워드 elif는 'else if'의 줄임말이며 과도한 들여 쓰기를 방지하는 데 유용합니다.


C와 유사한 구문을 가진 언어 else if는 전혀 구현하지 않고도 무료로 얻을 수 있습니다.

그 이유는 구문 제어 구조가 단순히 다음 명령문에서 작동하기 때문이며, 필요한 경우 중괄호로 묶인 복합 명령문 일 수 있습니다 (예 :) { x += 1; y += 1 }.

이미 구현 한 후에는 것을이 수단 ifelse, else if단지 더 이상의 구현 노력으로, 자연적으로 무료로 언어의 문법 밖으로 떨어진다. 이유를 확인하려면 다음을 참조하십시오.

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

이것은 각각 복합 명령문에 적용되는 ifwith else ifelse첨부 처럼 보입니다 . 그러나 사실 그렇지 않습니다. 이것은 실제로 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 동작 할 것입니다 ! 따라서 구현 에 전혀 신경을 쓸 필요가 없습니다 . 언어 구현 얻을 그들이 구현 한 후, 구문이 스타일과 무료 하고 .ifelseelse ifelse ififelse

파이썬의 구문은이 공짜를 허용하지 않습니다.

C 스타일의 구문의 프로그래머는 수 생각 의 관점에서 else if언어 만있는 경우에도 if정확히 제로 또는-하나 else,하지만이 방식으로 서식이 내 첫 번째 예와 같은 코드를 작성할 수 있습니다 이유만으로 그 사람의 리더보다 다른 모습 컴파일러에게합니다.

Python, OTOH는 들여 쓰기를 사용하여 블록 구조를 나타내며, 이는 블록 구조가 인터프리터 2 에서와 마찬가지로 사람 독자에게도 동일하게 보이도록합니다 . 당신이있어 일단 ifelse파이썬 스타일의 구문에서, 프로그래머 수 여전히 쓰기 코드가 동작합니다 동일에 다른-경우, 두 번째 넣어 if내부에서 문을 else첫 번째의. 그러나 그것은 다음과 같이 나옵니다.

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

이것은 추악 해 보이며, 1 개 또는 2 개 이상의 else-if를 받으면 else-if 체인보다 생각하기가 훨씬 더 복잡합니다. 따라서 else-if 관점에서 생각할 수있는 능력을 되찾기 위해 명시적인 언어 기능을 추가하는 것이 좋습니다. 기술적으로는 언어를 더 복잡하게 만들지 만 실제로는 언어 측면에서 생각 을 더 단순하게하므로 좋은 복잡성입니다. ifs 내부에 수동으로 구성된 중첩 s 체인을 사용 else하여 판독기는 모든 코드를 수동으로 읽고 else마지막 코드를 제외한 모든 코드 에 정확히 하나의 if문만 포함되어 있는지 확인해야 합니다. 전체 시퀀스가 ​​조건의 선형 체인과 동일하다는 결론을 내릴 수 있습니다. 성공한 첫 번째 검사를 실행할 코드가있는 순서대로 검사합니다.

So then. We've seen that languages with C-like syntax might as well go with else if, because they get it for free. That's the reason why that exists. Languages with Python-like syntax have to explicitly do something to get a construct that can be used as an else-if. Why did they choose elif? It's arbitrary; you'd have to actually ask the people who made the decision.

However Python didn't invent elif, it was around in other languages long before Python existed. So I would guess that when they had to implement an explicit else-if construct they simply picked one that programmers were already familiar with.


1 Technically, this is how people who are REALLY serious about always using braces with control structures should write their code. ;)

2 You can certainly construct counter-examples to this, but it's the general idea of indentation-based syntax.


To avoid brace^H^H^H^H^Helse if war.

In C/C++ where you have an else if, you can structure your code in many different styles:

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


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

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

// and so on

by having an elif instead, such war would never happen since there is only one way to write an elif. Also, elif is much shorter than else if.


That's just the way it is. Javascript uses else if, php uses elseif, perl uses elsif, the C preprocessor and python use elif. None of them are wrong, they just choose slightly different syntax to do the same thing. :D


I find them helpful to help differentiate the "else-if"s from the "final else".


elif is some sort of replacement for switch in other languages but with more power

for example in C you write

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

in Python you write

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

As you see elif is more powerful since you can put more complex statements than in a switch, plus avoid nesting if/else statements


Python inherits this from Perl, where it's called elsif.

In Python's case, else if as two separate constructs like it is in C-like languages would be quite ugly as you'd have to have else: if: with two indenting levels.

It's arguable whether special-casing the two keywords together would be better (so making else if a single construct, like the not in operator.

PL/SQL also has elsif, and the C preprocessor has it spelled elif.

참고URL : https://stackoverflow.com/questions/3742580/python-why-elif-keyword

반응형