Python の print()
関数は、tty (teletypewriter A.K.A. terminal) に表示するとき、出力に改行を追加して出力します。
改行や空白で表示させたくない場合、どのように print()
の動作を変更すればよいでしょうか。
これは print()
関数の sep
と end
パラメータのデフォルト値を変更することで簡単に実現できます。
改行がない場合の印刷
Python バージョン 2.x までは、 print
は特別なステートメントとして機能する予約キーワードでした。
Python バージョン 3.x からは、 print
コマンドは関数に進化しました。
このバージョンの print()
は、次の引数を取ることができます。
上記の値 (value1
, value2
) は、任意の文字列、またはリスト、フロート、文字列などの任意のデータ型にすることができます。
その他の引数には、引数として与えられた値を分割するためのセパレータ (sep
) が含まれ、引数 end
はデフォルトで n
という改行文字になります。
これは、 print()
関数が呼ばれるたびに、カーソルが次の行にスライドする理由でもあります。
Python 3.x では、改行せずに印刷する最も簡単な方法は、 end
引数を空の文字列、つまり ''
に設定することです。
例えば、次のスニペットをPythonインタープリターで実行してみてください。
print("I am a sentence", "I am also a sentence")
インタープリターは次のように出力します。
I am a sentence I am also a sentence
>>>
ここでは2つの文字列を表示しているので、Pythonはsep
の値、デフォルトでは空白を使用して、それらを一緒に表示します。
Pythonはまた、最後に改行文字を追加するので、インタプリタのプロンプトは最終行に行きます。
さて、前の文を次のように修正します。
print("I am a sentence", "I am also a sentence", sep="; ", end="")
これをインタープリターで実行すると、次のような出力が得られます。
I am a sentence; I am also a sentence>>>
2つの文字列の間にあるセパレーターには、セミコロンが含まれるようになりました。
インタープリターのプロンプトが同じ行に表示されるのは、自動的に付加される改行文字を削除したためです。
Python 2.X での改行なしの印刷
Python 3 以上 2.6 未満のバージョンでは、 __future__
モジュールから print_function
をインポートすることができます。
これは、既存の print
キーワードを、以下のように print()
関数で上書きします。
from __future__ import print_function
print("I am a sentence", "I am also a sentence", sep="; ", end="")
これはまた、次のようになります。
I am a sentence; I am also a sentence>>>
このようにして、Pythonバージョン3の print()
関数をPython 2.xで使用することができます。
stdout.write() の使用法
sysモジュールは、ファイルや tty に直接書き込むための組み込み関数を持っています。
この関数は Python 2.x と 3.x のバージョンで利用可能です。
このように、sysモジュールの
stdoutオブジェクトの
write()` メソッドを使用すると、コンソールに印刷することができます。
import sys
sys.stdout.write("I am a line")
これを実行し、出力を見てみましょう。
I am a line>>>
これは私たちが達成しようとしていることを出力していますが、 write()
関数と print()
関数の間にはかなりの違いがあります。
print()` 関数は一度に複数の値を表示することができ、文字列以外の値も受け入れることができ、開発者にとってより友好的な関数です。
結論
この記事では、改行文字やキャリッジリターンを使用せずに値を表示するさまざまな方法について説明しました。
この方法は、二分木のようなアルゴリズムの出力に含まれる要素を印刷したり、リストの内容を隣り合わせに印刷したりする際に非常に便利です。