Pythonのprint関数の素晴らしさをここに示す
目次
- Pythonのprint関数の使い方
- print()の構造
- 標準出力と標準エラー出力
- 数値をprint()で出力する
- 文字列をprint()で出力する
- オブジェクトをprint()で出力する
- sepキーワード引数で区切り文字を指定する
- endキーワード引数で行末の文字を指定する
- fileキーワード引数で出力先のファイルオブジェクトを指定する
- flushキーワード引数で出力をフラッシュする
- おわりに
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
です。
このflush
がTrue
のとき、file
に指定されたファイルオブジェクトは常に強制的にフラッシュされます。
print(1, 2, 3, flush=False) print(1, 2, 3, flush=True)
標準出力と標準エラー出力
標準出力とは、その名の通り「標準の出力先」を表すオブジェクトです。
いっぽう標準エラー出力は「標準のエラー時の出力先」を表すオブジェクトです。
Pythonではこれらのオブジェクトは、sys
モジュールで定義されています。
import sys
sys.stdout
はstandard output
の略で、標準出力を表すオブジェクトです。
また、sys.stderr
はstandard 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キーワード引数で出力をフラッシュする
キーワード引数flush
にTrue
を指定すると、バッファリグンが無視され書き込み内容が強制的にフラッシュされます。
print(1, 2, 3, flush=True)
↑のコードを実行すると↓のような結果になります。
1 2 3
おわりに
今回はPythonのprint()
の使い方を見てみました。
print()
は入門者から熟練者までに幅広く使われる関数の1つです。
意外にこの記事の内容は知らない人が多いので、こっそりブックマークしておいてください。
何かのお役に立てるかもしれません。
(^ _ ^) | print()で希望の橋を築こう |