ユーニックス総合研究所

  • home
  • archives
  • python-print

Pythonのprint関数の素晴らしさをここに示す

  • 作成日: 2021-04-29
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonのprint関数の使い方

Pythonには組み込み関数にprint()があります。
このprint()を使うと、さまざまなオブジェクトを標準出力や標準エラー出力に出力することができます。

この記事ではprint()の使い方について詳しく見ていきます。
具体的には↓です。

  • print()の構造
  • 標準出力と標準エラー出力
  • 数値をprint()で出力する
  • 文字列をprint()で出力する
  • オブジェクトをprint()で出力する
  • sepキーワード引数で区切り文字を指定する
  • endキーワード引数で行末の文字を指定する
  • fileキーワード引数で出力先のファイルオブジェクトを指定する
  • flushキーワード引数で出力をフラッシュする

print()の構造

print()の構造について解説します。

print()は↓のような構造を持っています。

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)  

print()は複数個のobjectsを引数に取ります。
その他にはキーワード引数としてsep, end, file, flushを取ります。

objects(第1引数)

objectsの引数はすべて文字列に変換されます。
そしてsepで区切られてfileに出力され、最後にendが出力されます。

print(オブジェクト1, オブジェクト2, オブジェクト3, ...)  

sep(キーワード引数)

複数のobjectが出力される時に、それらのobjectの間に出力されるのがsepです。
デフォルトでは半角スペースがセットされています。
このsepの値を変えることで区切り文字を変更することができます。

print(1, 2, 3, sep=':')  
print(1, 2, 3, sep=',')  
print(1, 2, 3, sep='/')  

end(キーワード引数)

複数のobjectの出力が終わり、最後に出力されるのがこのendキーワード引数です。
デフォルトでは改行がセットされています。
つまりprint()はデフォルトで行末に改行を付加します。
このendの値を変えることで行末の出力を変えることができます。

print(1, 2, 3, end=':')  
print(1, 2, 3, end=',')  
print(1, 2, 3, end='/')  

file(キーワード引数)

objectsを出力する先のファイルオブジェクトを指定します。
デフォルトではsys.stdoutオブジェクト、つまり標準出力のオブジェクトがセットされています。
このfileの値を変えることで出力先のファイルオブジェクトを変更することができます。

print()objectsはすべて文字列に変換されるため、この引数にバイナリファイルのオブジェクトは指定できません。
出力がバッファリングされるかどうかはファイルオブジェクトの設定によります。

print(1, 2, 3, file=sys.stdout)  
print(1, 2, 3, file=sys.stderr)  
print(1, 2, 3, file=myfile)  

flush(キーワード引数)

出力をバッファリングせずに常に出力するようにしたい場合に、このflushキーワード引数にTrueを指定します。
デフォルトではFalseです。
このflushTrueのとき、fileに指定されたファイルオブジェクトは常に強制的にフラッシュされます。

print(1, 2, 3, flush=False)  
print(1, 2, 3, flush=True)  

標準出力と標準エラー出力

標準出力とは、その名の通り「標準の出力先」を表すオブジェクトです。
いっぽう標準エラー出力は「標準のエラー時の出力先」を表すオブジェクトです。

Pythonではこれらのオブジェクトは、sysモジュールで定義されています。

import sys  

sys.stdoutstandard outputの略で、標準出力を表すオブジェクトです。
また、sys.stderrstandard errorの略で、標準エラー出力を表すオブジェクトです。

sys.stdout  
sys.stderr  

これらのオブジェクトはprint()は内部的に使っていて表には見えませんが、print()fileキーワード引数に明示的に指定することも可能になっています。

普通の出力では標準エラーを使い、エラー時には標準エラー出力を使うようにすれば、行儀の良いプログラムになります。
これは暗黙的なもので、ほとんどのプログラムはこの暗黙的な約束事に従っています。

数値をprint()で出力する

数値をprint()で出力するには↓のようにします。

print(1, 2, 3)  
print(1.1, 2.2, 3.3)  

↑のコードは実行すると↓のような結果になります。

1 2 3  
1.1 2.2 3.3  

print()の内部で数値は暗黙的に文字列に変換されます。

文字列をprint()で出力する

文字列をprint()で出力するには↓のようにします。

print('The', 'Hello', 'World')  

↑のコードの実行結果は↓のようになります。

The Hello World  

オブジェクトをprint()で出力する

独自のオブジェクトをprint()で出力するには↓のようにします。

class MyObject:  
    pass  

print(MyObject())  

↑の結果は↓になります。

<__main__.MyObject object at 0x000001DF23B9AFD0>  

MyObject__str__を定義すれば文字列に変換される際の挙動を操作することができます。
たとえば↓のようにです。

class MyObject:  
    def __str__(self):  
        return 'my-object'  

print(MyObject())  

↑の結果は↓になります。

my-object  

↑の例では__str__()で文字列my-objectを返すようにしています。
そのためprint()内の変換ではその文字列が取得されます。

sepキーワード引数で区切り文字を指定する

キーワード引数sepに値を指定することで区切り文字を変更できます。
この値はデフォルトでは半角スペースです。
たとえばコロン(:)を指定する場合は↓のようになります。

print(1, 2, 3, sep=':')  

↑のコードを実行すると↓のような結果になります。

1:2:3  

endキーワード引数で行末の文字を指定する

キーワード引数endに値を指定すると行末に出力する値を変更できます。
たとえば↓のように変更します。

print(1, 2, 3, end='\n--------\n')  

結果は↓のようになります。

1 2 3  
--------  

fileキーワード引数で出力先のファイルオブジェクトを指定する

キーワード引数fileにファイルオブジェクトを指定すると、出力先を変更することができます。
たとえば標準エラー出力に出力先を変更したい場合は↓のようにします。

import sys  

print('error!', file=sys.stderr)  

↑のようにすると↓のように標準エラー出力に出力されます。

error!  

また、ファイルを開いてそのファイルを出力先に変更したい場合は↓のようにします。

with open('file.txt', 'w') as fout:  
    print(1, 2, 3, file=fout)  
    print('Hello', 'World!', file=fout)  

↑のコードを実行するとfile.txtというファイルが作成され↓のような内容になります。

1 2 3  
Hello World!  

flushキーワード引数で出力をフラッシュする

キーワード引数flushTrueを指定すると、バッファリグンが無視され書き込み内容が強制的にフラッシュされます。

print(1, 2, 3, flush=True)  

↑のコードを実行すると↓のような結果になります。

1 2 3  

おわりに

今回はPythonのprint()の使い方を見てみました。
print()は入門者から熟練者までに幅広く使われる関数の1つです。
意外にこの記事の内容は知らない人が多いので、こっそりブックマークしておいてください。
何かのお役に立てるかもしれません。

🦝 < print()で希望の橋を築こう