2012-08-25 11 views
27

sys.stdout.write()sys.stderr.write()という出力を作成するスクリプトがあります。最近、私はスクリプトの他の側面についていくつかの質問を投稿しました。答えを投稿する人はprint('some text', file=sys.stdout)を好むようです。出力に関する私の第一の関心事は、ファイルによって、あるいは別のプログラムへの入力としてシェルによってパイプされるということだけです。誰かがprint()sys.stdout.writeの違いを説明してください(または私に既存の説明を教えてください)。どちらを使うべきですか、それらの規則に合理的ですか?print()とsys.stdout.write():どちらが、なぜですか?

+0

可能な重複「可読性をカウント」(HTTPSを: //stackoverflow.com/questions/3263672/python-the-difference-between-sys-stdout-write-and-print) –

答えて

37

誰かくださいを説明する(または既存の説明を私に直接)プリントとの違い()とsys.stdout.write、それぞれがこれらの規則を使用して合理的すべき例はできますか? "

まあ、私はあなたがPython3のprint()関数に関して聞いている沈黙は、実際には1つの違いがあるためです:使用法。私にしてみましょう引用PEP-3105:[1]

print()のシグネチャは次のとおりです。

デフ(* argsを、9月=」」、エンド= '\ nの'、ファイル=なし)

印刷

ような呼び出し:

プリント(A、B、C、ファイル= sys.stderrを持ち)

は、今日のと等価になります:

印刷>> sys.stderrを持ち、A、B、C

オプションの9月と最後の引数は、それぞれの間と引数の後に印刷されたものを指定しながら、 。

ソフトスペース機能(最初の項目の前にスペースを挿入するかどうかを印刷するために現在使用されているファイルの半秘密属性)が削除されます。

印刷「A」、印刷

「」と改行の間にスペースを印刷されません。そのため、今日のための直接的な翻訳ができません。

2005年の問題についてのグイド・ヴァン・ロッサムの議論[1]:アイテム間にスペースを入れたくないと決めると、使い勝手がはっきりとした非直線性があります。 sys.stdout.write()に切り替えるか、文字列内のすべての項目を収集する必要があります。これは単純な変換ではありません、それはこの単純な例では、コンマの前にスペースを取り除くために必要なものを考えてみます。

print "x =", x, ", y =", y, ", z =", z 

を、それはビルトインを持つ、組み込み関数だった場合スペースを挿入せずに改行を追加した同様のことを行うコンパニオン関数は論理的なことです(または、その動作を制御するキーワードパラメータを追加しますが、私は第2の関数を好む)。それが現在立っているとしてだけ プリントで、あなたは

print "x = " + str(x) + ", y = " + str(x) + ", z = " + str(z) 

または

print "x = %s, y = %s, z = %s" % (x, y, z) 

いるのでもないが、非常に魅力的であるようなものに切り替える必要があるだろう。ダウン日曜日の朝メモリ車線のため


良い質問を - (彼らはこの例ではありませんが、他の状況にあり、スペースは大したことではないことを私に教えていません。) ; なぜこの明らかな冗長性ですか?パイソンの

7禅:それはpythonicallyより正確な、より高いレベルのコードを書くことであるのでは[パイソン - sys.stdout.writeとプリントとの間の差]の

関連する問題