파이썬 블록의 콜론은 기술적으로 필요합니까?


19

이것은 실제로 더 많은 것을 알고 싶어하는 파이썬 초보자의 이론적 인 질문입니다.

파이썬에서 블록 초기 문장 다음에 콜론을 잊어 버렸습니다. 이것이 내가 의미하는 바입니다.

  • for <variable> in <sequence>:
  • if <blah blah>:

내 생각은 내가 잊어 버린 한 가지 이유는 그것들이 사실상 암시 적이라는 것입니다. 즉 콜론인지 아닌지에 대한 진술은 그 줄로 끝납니다.

파이썬 구문이 어떻게 작동하는지 배우기 위해 묻는 질문은 콜론이 실제로 불필요한 지 여부입니다. 콜론이 더 이상 필요하지 않도록 파이썬 구문을 변경해야합니까? 그것이 어떤 진술을 모호하거나 불가능하게 만들 것입니까?


4
구문을 작동시키는 데 콜론이 필요한지 여부를 질문을 이해하지 못한다고 생각합니다. 또한 답이 무엇이든 설명도 포함해야합니다.
Tomáš Zato-복직 모니카

아마도, 당신은 질문의 일부를 바꿔서이 문제에 대한 당신의 통찰력으로부터 도움을 얻을 수 있습니까? 당신은 최고의 판사가 될 것입니다. 나는 당신의 질문에 대한 단서가 없다고 생각합니다. 인터프리터 / 컴파일러 파서 수준에서 의미합니까? 무리 감사.
bhan sur

나는 그것을 더 잘 표현하는 방법을 모른다. 당신은 더 이상 후 콜론을 필요로하여 모든 파이썬 구문을 변경할 수 있다면 내 질문은 기본적으로이다 if, else, while등등. 그렇게하면 파이썬은 여전히 ​​모호하지 않고 사용할 수있는 언어입니까?
Tomáš Zato-복직 모니카

알았다! 파이썬의 구문 디자인 결정에 관한 질문 입니다. 죄송합니다. 설명해 주셔서 감사합니다.
bhan sur

투기. 마치 실제로 통역사 / 파서가 줄 바꿈을 감지하기 어렵거나 가독성이있는 것처럼 보입니다. LUA에서는 if .. then .. end한 줄로 작성할 수 있습니다 . 그래서 여기서 파이썬 then에서는 두 가지 a :와 필수 줄 바꿈으로 대체됩니다 . 이 중 하나가 중복 된 것 같습니다.
bhan sur

답변:


9

예, 콜론은 특정 구성을 명확하게하기 위해 필요합니다. 예를 들어을 고려하십시오 if x - y < z: pass. 콜론이 없으면 x, y 및 z의 컨텍스트를 모르면이를 구문 분석하는 방법을 결정할 수 없습니다. if x: -y < z...x가 부울이면 if x - y < z:유효하고 , 그렇지 않으면 유효합니다.

프로그래밍 언어가 구문 분석 할 수있는 시점까지 응용 프로그램을 실행하도록 요구하지 않는 것이 좋습니다. 콜론이 매우 필요합니다. 떨어 뜨릴 수는 있지만 다른 방법으로 명확하게해야합니다.


1
잠깐, 콜론 다음에 같은 줄에 진술을 할 수 있습니까? 나는 그것이 허용되지 않는다고 확신했다.
Tomáš Zato-복직 모니카

1
허용되지만 그 뒤에 줄 바꿈이 있어야합니다.
Phoshi

아직도 조금 혼란스러워. 이것이 if condition: print("Condition passed")\n허용됩니까? 는 \n인쇄 문 다음에 새로운 라인을 상징한다.
Tomáš Zato-복직 모니카

그래, 그냥 해봐
RemcoGerlich

1
@TomasZato : 그렇습니다. 콜론 뒤에 어떤 문장도 가질 수 있습니다. 블록을 즉시 종료하므로 블록이 작은 하나의 라이너 일 때 주로 유용합니다.
Lie Ryan

14

콜론은 문법적으로 실제로 필요하지 않습니다. 파이썬이 다른 세계에서 설계되었으므로 언어 ​​디자이너가 콜론을 요구하지 않을 수도 있습니다. 그리고 실제로 코브라와 같은 언어가 이것을합니다.

파이썬에서 콜론이 필요한 주된 이유는 인간의 가독성입니다. 파이썬 FAQ 에서 인용하려면 :

if / while / def / class 문에 콜론이 필요한 이유는 무엇입니까?

콜론은 주로 가독성 (실험적인 ABC 언어의 결과 중 하나)을 향상시키기 위해 필요합니다. 이걸 고려하세요:

if a == b
    print(a)

if a == b:
    print(a)

두 번째가 읽기 쉬운 방법에 주목하십시오. 이 FAQ 답변에서 콜론이 예제를 어떻게 설정했는지 자세히 살펴보십시오. 영어의 표준 사용법입니다.

또 다른 사소한 이유는 콜론으로 편집자가 구문 강조를 쉽게 할 수 있다는 것입니다. 그들은 프로그램 텍스트를 좀 더 정교하게 파싱하는 대신 들여 쓰기를 늘려야 할 시점을 결정하기 위해 콜론을 찾을 수 있습니다.

FAQ에서 언급했듯이 콜론을 사용하면 언어를 완전히 파싱하지 않고도 파이썬 코드를 쉽게 처리 할 수 ​​있습니다. 파이썬 컴파일러를 포함한 완전한 파서가있는 모든 텍스트 프로세서는 콜론없이 필요하지 않거나 모호하지 않은 경우 선택 사항으로 만들면 콜론없이 수행 할 수 있습니다.


3
“두 번째가 읽기 쉬운 방법에 주목하십시오.”첫 번째 읽기가 더 쉽다는 것을 알게되었습니다. 적은 소음.
user76284

10

컴퓨터에는 필요하지 않지만 인간에게는 필요합니다.

귀도 반 로섬 (파이썬의 제작자)은 한동안 파이썬 역사 블로그를 가지고있었습니다. 콜론은 많은 파이썬 기능의 원천 인 ABC 에서 소개되었습니다 .

에서 "카린 듀어, 들여 쓰기 및 콜론"에이 블로그 게시물 , 귀도 글 :

그리고 여기 램버트의 요청에 따라 변역 할 것입니다.

1978 년 Jabłonna (폴란드) 저택의 디자인 세션에서 Robert Dewar, Peter King, Jack Schwartz 및 Lambert는 각 대안에 기록 된 (버기) 버블 정렬 구현을 비교하여 B에 대한 다양한 대체 제안 구문을 비교했습니다. 그들이 동의 할 수 없었기 때문에 Robert Dewar의 아내는 그녀의 방에서 전화를 받았고 현대 파리가 Hera, Athena 및 Aphrodite의 아름다움을 비교하도록 요청한 것처럼 그녀의 의견을 물었습니다. 그러나 첫 번째 버전이 그녀에게 설명 된 후 그녀는 다음과 같이 말했습니다. " 'FOR i ...'라고 적힌 줄에서, 그 줄뿐만 아니라 다음 줄에 대해서도 수행되어야합니까? ! " 그리고 과학자들은 그 줄 끝에 콜론이 있다면 오해를 피할 수 있다는 것을 깨달았습니다.

( 여기서 B 는 ABC로 이어진 일련의 프로토 타입 언어 B0, B1입니다. C의 전신 인 B 언어가 아닙니다).

또한 Guido가 90 년대에 에디터 의 이익을위한 것이라고 지적 했으며, 콜론으로 끝나는 줄 다음에 들여 쓰기를 자동으로 삽입 할 수 있습니다. 그러나 아직 그 소스를 찾지 못했습니다.


4

코브라 프로그래밍 언어 의 문법은 크게 파이썬에서 영감을, 그리고 꼭 필요한 것은 것 같다 그래서 멀리 콜론으로 수행된다. 그러나 콜론 제거하는 것만으로는 충분하지 않으며 필요한 구문에 다른 변경 사항이 있습니다. 예를 들어이 코드를보십시오장난감 프로젝트 중 하나의 다음 를 .

kons  = lambda hd, tl: lambda x: hd if x else tl
virst = lambda l: l(True )
rrest = lambda l: l(False)

콜론이 없으면 매개 변수 목록에서 본문을 분리하려면 들여 쓰기를 사용해야합니다.

kons  = lambda hd, tl
    lambda x
        hd if x else tl

virst = lambda l
    l(True )

rrest = lambda l
    l(False)

나는 이전 버전의 Cobra가 콜론을 옵션으로 만들었다 고 생각합니다. 들여 쓰기 또는 콜론 또는 둘 다 사용할 수 있습니다. Ruby에서 작동하는 방식과 유사하게 제어 표현식의 다른 부분을 구분하는 키워드가 있지만 표현식 구분 기호 (세미콜론 또는 개행)를 사용할 수도 있습니다.

# idiomatic
while true do puts "I am awesome" end
#          ↑↑

# non-idiomatic, but legal
while true; puts "I am awesome" end
#         ↑

# non-idiomatic, but legal
while true
puts "I am awesome" end

# idiomatic
while true
  puts "I am awesome"
end

현재 버전의 Cobra에서는 쉼표를 사용할 수 있습니다.

if x
    y

로 쓸 수 있습니다

if x, y

당신이해야 할 몇 가지 제어 표현식 또는 정의의 다른 부분을 분리하는 방법. 파이썬에서는 이것이 콜론입니다. 콜론을 제거하면 강제 들여 쓰기 와 같은 다른 콜론으로 대체해야합니다 . 결장이 작동하지 않습니다 제거.

절대적으로 확신 할 수있는 유일한 방법은 콜론을 사용하거나 사용하지 않고 구문을 공식화하고 모호하지 않음을 증명하는 것입니다.

그러나 파이썬선 (Zen of Python ) 의 격언 중 하나 는 "명시 적 (Explicit)이 암시 적 (implicit)보다 낫다"라는 점에 유의하십시오. 따라서 콜론으로 블록을 명시 적으로 묘사하는 것은 파이썬의 일반적인 철학에 맞는 것 같습니다. 디자인 역사 자주 묻는 질문은 이 결정이 파이썬의 전신 인 ABC에서 경험적 증거에 근거 것을 언급하고있다.


3
마지막 단락에 설명 된 철학으로 모든 줄 끝에 콜론이 필요할 수 있습니다. 명시 적 vs 암시 적은 명시 적 정보가 실제로 정보를 추가하는 경우에만 의미가 있습니다 (예 : 암시 적 변형이 모호함). 내 질문의 요점은 어느 것입니까?
Tomáš Zato-복직 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.