from __future__ import print_functionを使用するとPython2スタイルの印刷が中断されるのはなぜですか?[閉まっている]


135

私はpythonでプログラミングするのが初めてで、セパレータを付けて出力しようとしていますが、それでも構文エラーが発生します。

Python 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
printを関数としてインポートしましたが、それをまだステートメントとして扱ってます
jonrsharpe 2015

4
あなたは(引数)関数で印刷するプリントを変更しているので、あなたは括弧なしで印刷を呼び出すことはできません
チャーリー・パーカー

回答:


210

まずfrom __future__ import print_function、スクリプトのコードの最初の行である必要があります(下記のいくつかの例外を除く)。第二に、他の答えが言ったように、あなたはprint今関数として使用しなければなりません。それがの要点ですfrom __future__ import print_function。持参のprint 機能を Pythonの2.6+へのPython 3から。

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ステートメントはコンパイル時に特別に認識され、処理されます。コアコンストラクトのセマンティクスへの変更は、多くの場合、異なるコードを生成することによって実装されます。新しい機能が新しい互換性のない構文(新しい予約語など)を導入する場合もあります。その場合、コンパイラーはモジュールを異なる方法で解析する必要があります。このような決定は、実行時まで延期できません。

ドキュメントでは、__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 2015

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 2015

1
@AvinashRaj、わかりません。UHMISに尋ねる必要があります。しかし、私があなたの答えに対するコメントで述べたように、おそらくOPは変更を加え、それについて言及しませんでした。そしてOPの最初のコメント、まだエラーがあったということでした。
Cyphase 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.