__future__ import print_function을 사용하면 왜 Python2 스타일 인쇄가 중단됩니까? [닫은]


135

파이썬으로 프로그래밍하는 데 익숙하지 않으며 구분 기호와 끝으로 인쇄하려고하지만 여전히 구문 오류가 발생합니다.

파이썬 2.7을 사용하고 있습니다.

내 코드는 다음과 같습니다.

from __future__ import print_function
import sys, os, time

for x in range(0,10):
    print x, sep=' ', end=''
    time.sleep(1)

그리고 여기 오류가 있습니다 :

$ python2 xy.py
  File "xy.py", line 5
    print x, sep=' ', end=''
          ^
SyntaxError: invalid syntax
$

4
인쇄물을 함수로 가져 왔지만 여전히 인쇄물로 취급하고 있습니다.
jonrsharpe

4
print를 함수 print (args)로 변경했기 때문에 괄호없이 print를 호출 할 수 없습니다
Charlie Parker

답변:


210

우선, from __future__ import print_function스크립트의 첫 번째 코드 행이어야합니다 (아래에 언급 된 일부 예외는 제외). 둘째, 다른 답변에서 말했듯이 print지금 함수 로 사용해야 합니다. 그게 요점입니다 from __future__ import print_function. print 함수 를 Python 3에서 Python 2.6 이상으로 가져옵니다 .

from __future__ import print_function

import sys, os, time

for x in range(0,10):
    print(x, sep=' ', end='')  # No need for sep here, but okay :)
    time.sleep(1)

__future__명령문은 언어에 대한 기본 사항을 변경하기 때문에 파일의 맨 위에 있어야하므로 컴파일러는 처음부터 명령문에 대해 알아야합니다. 에서 문서 :

미래의 진술은 컴파일 타임에 특별히 인식되고 처리됩니다. 핵심 구문의 의미에 대한 변경은 종종 다른 코드를 생성하여 구현됩니다. 새로운 기능이 호환되지 않는 새로운 구문 (예 : 새로운 예약어)을 도입하는 경우도있을 수 있으며,이 경우 컴파일러가 모듈을 다르게 구문 분석해야 할 수도 있습니다. 이러한 결정은 런타임까지 푸시 될 수 없습니다.

문서는 또한 __future__명령문 앞에 올 수있는 유일한 것은 모듈 docstring, 주석, 빈 줄 및 기타 향후 명령문이라고 언급합니다.


1
First of all, from __future__ import print_function needs to be the first line of code in your script 왜 그런지 알 수 있을까요?
Avinash Raj

1
@UHMIS는 수행 end=' '.
Cyphase

14
문서 (에서 언급 한 바와 같이 docs.python.org/2/reference/simple_stmts.html#future )가있다 하지첫째 : 라인 A future statement must appear near the top of the module. The only lines that can appear before a future statement are: the module docstring (if any), comments, blank lines, and other future statements.
ngulam

1
@ ngulam, 나는 그것을 언급하기 위해 편집했지만 첫 번째 단락에서는 명확하지 않았으므로 수정했습니다. 지적 해 주셔서 감사합니다.
Cyphase

1
@AvinashRaj, 나는 모른다; UHMIS에 문의해야합니다. 그러나 귀하의 답변에 대한 의견에서 말했듯이 OP는 아마도 변경하고 언급하지 않았습니다. OP의 첫 번째 의견 은 여전히 ​​오류 있었다는 것입니다.
Cyphase
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.