파이썬은 문장을 끝내기 위해 세미콜론을 사용할 것을 보증하지 않습니다. 그렇다면 왜 이것이 (아래) 허용됩니까?
import pdb; pdb.set_trace()
답변
파이썬은 문장을 끝내기 위해 세미콜론을 요구 하지 않습니다 . 같은 줄에 여러 명령문을 넣으려면 세미콜론 을 사용하여 명령문을 구분할 수 있습니다.
자, 왜 이것이 허용됩니까? 단순한 디자인 결정입니다. 파이썬 에이 세미 콜론이 필요하다고 생각하지 않지만 누군가가 그것을 가지고 언어에 추가하는 것이 좋을 것이라고 생각했습니다.
답변
http://docs.python.org/reference/compound_stmts.html
복합 문장은 하나 이상의 ‘절’로 구성됩니다. 조항은 헤더와 ‘스위트’로 구성됩니다. 특정 복합 명령문의 절 헤더는 모두 동일한 들여 쓰기 레벨에 있습니다. 각 절 헤더는 고유 식별 키워드로 시작하고 콜론으로 끝납니다. 제품군은 조항에 의해 제어되는 명령문 그룹입니다. 스위트는 헤더 콜론 다음에 헤더와 동일한 행에있는 하나 이상의 세미콜론으로 구분 된 간단한 명령문이거나 후속 라인에서 하나 이상의 들여 쓰기 된 명령문 일 수 있습니다 . 스위트의 후자 만 중첩 된 복합 명령문을 포함 할 수 있습니다. 다음은 불법입니다. 대부분 다음 if 절이 어떤 if 절에 속하는지 명확하지 않기 때문입니다.
if test1: if test2: print x
또한이 컨텍스트에서 세미콜론은 콜론보다 더 밀접하게 바인딩되므로 다음 예에서는 인쇄 명령문이 모두 또는 전혀 실행되지 않습니다.
if x < y < z: print x; print y; print z
요약 :
compound_stmt ::= if_stmt
| while_stmt
| for_stmt
| try_stmt
| with_stmt
| funcdef
| classdef
| decorated
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement ::= stmt_list NEWLINE | compound_stmt
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
답변
파이썬은 ;
종결자가 아닌 구분자로 사용합니다 . 또한 줄의 끝에서 그것들을 사용 하여 문장 종결 자로 보이게 할 수 있지만, 이것은 파이썬에서 빈 문장이 합법적이기 때문에 합법적입니다. 끝에 세미콜론을 포함하는 줄은 두 문장입니다. 하나의 공백.
답변
인터프리터의 세미콜론
답을 읽은 후에도 세미콜론을 사용하는 데있어 중요한 점이 하나도 없습니다.
인터프리터 REPL (Python 대화식 쉘, IDLE, ipython)에서 작업 할 때 마지막 표현식의 값이 화면에 인쇄되며 일반적으로 의도 된 동작입니다.
부작용에 대한 표현식 사용
그러나 경우에 따라 부작용에 대한 표현식 만 평가하려고합니다 (예 :로 표시 한 시뮬레이션 결과 참조) matplotlib
.
이 경우에 (아마도) 당신의 한 화면보고 싶지 않아 repr
의 S matplotlib
때로는 호출에 의해 반환되는 객체 matplotlib
적어도 IPython에, 기능을, 당신이 가지고있는 가능성 중 하나가에 세미콜론을 추가하는 것입니다 지나치게 verbose 문, 이제 IPython은 입력 행을 두 개의 표현식, matplotlib
호출 및 널 명령문 으로 구성한 것으로 간주 하여 복합 표현식의 값이 None
인터프리터에 의해 화면에 인쇄되지 않도록합니다 (다른 가능성은 할당 과 같이 할당 됨). _ = plot(...)
그러나 나는 조금 더 방해가되는 것을 발견했다).
개인적인 말
IMHO는 인터프리터에서 원하지 않는 출력을 억제하기 위해 세미콜론을 사용하는 것이 IPyton 노트북을 도입 한 후 더욱 관련성이 높아져서 문서 및 최종 재사용을 위해 인터프리터 세션의 그래픽 출력을 포함한 입력 및 출력을 저장할 수 있습니다. .
답변
다른 사람들이 언급했듯이 세미콜론을 사용하여 문장을 분리 할 수 있습니다. 당신은하지 않습니다 이 로, 그것은 보통의 스타일이 아니다.
이것이 왜 유용한 지에 대해, 어떤 사람들은 두 줄 이상의 사소한 짧은 문장을 한 줄에 넣기를 좋아합니다. .
그러나을 사용하여 쉘에서 Python 하나의 라이너를 호출 할 때 거의 요구 사항 python -c '<some python code>'
입니다. 여기 에서는 들여 쓰기를 사용하여 문을 구분할 수 없으므로 한 줄짜리 줄이 실제로 두 줄짜리 줄인 경우 세미콜론을 사용해야합니다. 그리고 하나의 라이너에 다른 인수를 사용하려면에 가져 오기 sys
위해 sys.argv
별도의 import
명령문 이 필요합니다 . 예 :
python -c "import sys; print ' '.join(sorted(sys.argv[1:]))" 5 2 3 1 4
1 2 3 4 5
답변
나는 오래된 C 프로그래머로 편견이 있지만 다양한 파이썬 규칙으로 인해 따르기가 어려울 때가 있습니다. 나는 들여 쓰기 규칙이 때때로 약간의 성가심을 발견합니다.
때로는 문장이나 블록이 끝나는 시점의 명확성이 매우 유용합니다. 표준 C 코드는 종종 다음과 같이 읽습니다.
for(i=0; i<100; i++) {
do something here;
do another thing here;
}
continue doing things;
명확성을 위해 공백을 사용하는 위치-루프가 끝나는 위치를 쉽게 확인할 수 있습니다.
파이썬은 (선택적) 세미콜론으로 끝나도록합니다. 위에서 언급했듯이, 이는 ‘null’문 다음에 실행할 명령문이 있음을 의미하지 않습니다. 예를 들어
print(x);
print(y);
와 같다
print(x)
print(y)
첫 번째 줄의 끝에 각 줄 끝에 null 문이 있다고 생각되면 제안대로-이 작업을 수행하십시오.
print(x);;
구문 오류가 발생합니다.
개인적으로, 나는 많은 인수 및 / 또는 이름이 긴 인수가있는 많은 중첩 및 함수가있을 때 코드를 더 읽기 쉽도록 세미콜론을 찾습니다. 내 눈에는 다른 선택보다 훨씬 명확합니다.
if some_boolean_is_true:
call_function(
long_named_arg_1,
long_named_arg_2,
long_named_arg_3,
long_named_arg_4
);
나에게 그것은 마지막 ‘)’가 많은 줄에 걸쳐있는 ‘블록’을 끝내는 것을 알려줍니다.
필자는 개인적으로 PEP 스타일 가이드 라인, 가이드 라인을 적용하는 IDE, 그리고 ‘한 가지 일을하는 단 하나의 파이썬 방식’이라는 믿음이 많이 있다고 생각합니다. 후자를 믿는다면 숫자의 형식을 지정하는 방법을 살펴보십시오. 현재 파이썬은 4 가지 다른 방법으로 지원 합니다.
필자는 일부 diehards에 화를 낼 것이라고 확신하지만 컴파일러 / 인터프리터는 인수의 이름이 길거나 짧은 이름을 신경 쓰지 않지만 파이썬의 들여 쓰기 규칙은 공백을 신경 쓰지 않습니다. 코드의 가장 큰 문제는 다른 사람 (그리고 심지어 수개월 동안 일한 후에도)에게 무슨 일이 일어나고 있는지, 일이 시작되고 끝나는 곳 등을 명확하게하는 것입니다.