파이썬, 왜 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'
훨씬 더 좋습니다.
이 키워드
elif
는 'else if'의 줄임말이며 과도한 들여 쓰기를 방지하는 데 유용합니다.
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
with 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
파이썬의 구문은이 공짜를 허용하지 않습니다.
C 스타일의 구문의 프로그래머는 수 생각 의 관점에서 else if
언어 만있는 경우에도 if
정확히 제로 또는-하나 else
,하지만이 방식으로 서식이 내 첫 번째 예와 같은 코드를 작성할 수 있습니다 이유만으로 그 사람의 리더보다 다른 모습 컴파일러에게합니다.
Python, OTOH는 들여 쓰기를 사용하여 블록 구조를 나타내며, 이는 블록 구조가 인터프리터 2 에서와 마찬가지로 사람 독자에게도 동일하게 보이도록합니다 . 당신이있어 일단 if
및 else
파이썬 스타일의 구문에서, 프로그래머 수 여전히 쓰기 코드가 동작합니다 동일에 다른-경우, 두 번째 넣어 if
내부에서 문을 else
첫 번째의. 그러나 그것은 다음과 같이 나옵니다.
if condition:
if_body()
else:
if another_condition:
else_if_body()
else:
else_body()
이것은 추악 해 보이며, 1 개 또는 2 개 이상의 else-if를 받으면 else-if 체인보다 생각하기가 훨씬 더 복잡합니다. 따라서 else-if 관점에서 생각할 수있는 능력을 되찾기 위해 명시적인 언어 기능을 추가하는 것이 좋습니다. 기술적으로는 언어를 더 복잡하게 만들지 만 실제로는 언어 측면에서 생각 을 더 단순하게하므로 좋은 복잡성입니다. if
s 내부에 수동으로 구성된 중첩 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
'Program Tip' 카테고리의 다른 글
C에서 Segfault를 생성하는 가장 간단한 표준 준수 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
Python에서 ROC 곡선을 그리는 방법 (0) | 2020.12.13 |
기계적 인조 인간. (0) | 2020.12.13 |
PHP를 사용하여 mysql 데이터베이스에서 .sql 파일을 가져 오는 방법 (0) | 2020.12.13 |
AngularJS UI-Router : 매개 변수로 상태의 절대 URL 가져 오기 (0) | 2020.12.13 |