2014-09-09 7 views
4

Python 인터프리터에서 #에 주석을 달면 ...과 함께 왜 프롬프트됩니까? 나는 >>> 프롬프트를 예상했다.왜 파이썬 인터프리터는 ... "#"주석을 묻는 프롬프트가 나타 납니까?

예를 들어,

>>> # my comment 
... x = 4 
>>> x 
4 

>>> # my comment 
... foo 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
NameError: name 'foo' is not defined 
+4

성명서를 기다리고 있습니다. 그것은 주석을 건너 뛰고 나머지 문장을 요구합니다 (그러므로'...'). 명령에 줄 연속 또는 불균형 괄호가 포함 된 경우와 매우 비슷합니다. – isedev

+0

나는 여기서 더 좋은 질문은 왜 명령 행을 사용하여 코멘트를 입력하려고 하는가하는 것이다. – KronoS

+0

문제가된다면,'foo = 4 # foobar' 후에 당신의 의견을 말하지 않을까요 –

답변

1

여기 내 은 추측 된 내용입니다 .에 대해 알고 있습니다. 실제로 파이썬의 REPL 코드를 보지 않았습니다. 알다시피, 파이썬 대화 형 셸은 선행 내용을 파싱하여 추가 입력이 필요할 때 ... 프롬프트를 사용합니다. 예를 들어

:

>>> if True: 
...  

... if ... :<newline> 때문은 lexical structure of Python에 따른 블록 들여 와야. 당신이 공백을 제외하고 비어 선, 예와 같은 약간 이상한 행동을 유발할 수

주의 사항 : 파이썬의 어휘 규칙에 따라

>>> <space><enter> 
... 

, 대부분의 상황에서 라인은 공백을 포함하는 pass 문 또는 빈 블록으로 처리해서는 안되지만 마치처럼 나타나지 않는 것처럼 으로 처리해야합니다. (각 라인의 끝에 공백의 부족을 강조 |로)이 예제를 가지고 :이 코드를 실행하면

if False:| 
| 
    print "Foo"| 
# comment| 
    print "Bar"| 
| 
print "Baz"| 

, 그것은 단지 Baz를 인쇄합니다. 첫 번째 두 print 문은 앞뒤에 비어있는 빈 줄 또는 주석 전용 줄이 있다는 사실에도 불구하고 중간에 동일한 블록 의 일부로 처리됩니다.

기본적으로 파이썬 인터프리터가 비어 있거나 주석 만 포함하는 행을 읽으면 행을 전혀 읽지 않은 것처럼 가장합니다. 대화 형 인터프리터는 기본적으로이 동작을 따릅니다. 즉, 입력을 기다리는 중이고 입력이 없으면 더 많은 입력을 요구합니다. 따라서 ... 입력 프롬프트가 계속됩니다.

가 전혀 라인의 경우 (line=='' EOL 문자 (들)을 잘라낸 후) 특수 맡았다 대화 형 인터프리터로라고하지만,이 특수 케이스가 포함 라인 확장하지 않은 것 같습니다 주석 및/또는 공백 만 사용하십시오.

0

그것은 당신이 def foo() :를 입력하고 Enter 키를 입력 할 때처럼, 프롬프트, 그것은 줄임표 (...) 당신을 위해 몇 가지 자동으로 메시지 탭을 넣습니다. 그것은 당신이 여러 줄에 걸쳐 뭔가를하고 있다는 것을 받아들이는 것입니다.

+0

"여러 행에 걸쳐 작업 중"- "#"의 경우 단일 행 "연산자"입니다. –