この記事では、Pythonのprint関数の使い方を解説します。print関数を使うことで文字列をターミナルやコマンドプロンプトなどのコマンドラインに標準出力することができます。また、出力先を変更することでファイルにデータを書き込んだりすることができます。それでは、print関数の使い方を見ていきましょう!
print関数の書式
print関数の書式は以下の通りです。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
引数名 | 意味 | デフォルト値 |
---|---|---|
*object | 出力するオブジェクトを指定します。可変長引数なので複数のオブジェクトを指定することができます。 | なし |
sep | 区切り文字を指定できます。 | スペース |
end | 末尾に出力する文字を指定できます。 | \n(改行文字) |
file | 出力先を変更できます。 | sys.stdout(標準出力) |
flush | ストリームを強制的にフラッシュさせるかどうかを指定できます。 | False |
*objects引数は可変長引数なので、それ以降の引数を指定するにはキーワード呼び出しが必須です。また、全ての引数は省略することが可能。
オブジェクトを出力[*objects引数]
*objects引数に指定されたオブジェクトは文字列に変換され標準出力されます。
print(オブジェクト, ...)
サンプル
試しに文字列リテラルを出力してみます。
print("Hello World")
実行結果
Hello World
変数に代入されたデータも出力することができます。
s = 'Hello World'
print(s)
実行結果
Hello World
文字列に変換して出力
print関数は、指定されたオブジェクトをstr()で文字列に変換して値を出力しています。
print(f'int: {100}')
print(f'リスト: {[1, 2, 3]}')
print(f'辞書: {{"a": 1, "b": 2}}')
print(f'range: {range(1, 2, 3)}')
実行結果
int: 100
リスト: [1, 2, 3]
辞書: {"a": 1, "b": 2}
range: range(1, 2, 3)
str()は、型に定義されている__str__メソッドを呼び出します。なので、型に__str__を定義することでprint関数で出力される値を指定することができます。
class TestClass:
def __str__(self):
return 'TestClassです'
tc = TestClass()
print(tc)
実行結果
TestClassです
区切り文字[sep引数]
sep引数を指定することで*objects引数が複数渡された際の区切り文字を指定することができます。デフォルト値は「スペース」です。
print(オブジェクト, ..., sep='区切り文字')
サンプル
まずは、デフォルトの状態で出力してみます。以下のように,(カンマ)で要素を区切ってオブジェクトを指定します。
print('a', 'b', 'c')
実行結果
a b c
以下のコードでは区切り文字に/(スラッシュ)を指定しています。
print('a', 'b', 'c', sep='/')
実行結果
a/b/c
末尾に出力する文字[end引数]
end引数を指定することで末尾に出力する文字を指定することができます。デフォルト値は「\n(改行文字)」です。
print(オブジェクト, ..., end='末尾に出力する文字')
サンプル
end引数を変更してみます。改行されないことに注意しましょう。
print('1', end='+')
print('2', end='=')
print('3')
実行結果
1+2=3
出力先の変更[file引数]
file引数を指定することで出力先を変更することができます。デフォルト値は「sys.stdout(標準出力)」です。
print(オブジェクト, file=出力先)
サンプル
出力先にファイルオブジェクトを指定して、オブジェクトをファイルに出力してみます。
# 書き込み専用でファイルを開く
fo = open('print.txt', 'w')
print('書き込む内容', file=fo)
# ファイルを閉じる
fo.close()
実行結果: print.txt
書き込む内容
このように、print.txtに出力することができました。
フラッシュ[flush引数]
flush引数にTrueを指定することで、ストリームを強制的にフラッシュします。
print(オブジェクト, flush=True)
バッファ化されるかどうかは出力先によって決まります。例えばsys.stdoutの場合、改行されるまでフラッシュされません。
サンプル
以下のコードでは、まとめてprintが出力されてしまいます。
import time
print('start!!')
time.sleep(1)
print('1', end='')
time.sleep(1)
print('2', end='')
time.sleep(1)
print('3', end='')
time.sleep(1)
print('finish!!')
実行結果
start!!
123finish!!
このようにバッファリングされてしまった場合に、flush引数をTrueにすることでprint関数が呼びれた時に即時にフラッシュさせることができます。
import time
print('start!!')
time.sleep(1)
print('1', end='', flush=True)
time.sleep(1)
print('2', end='', flush=True)
time.sleep(1)
print('3', end='', flush=True)
time.sleep(1)
print('finish!!')
実行結果
start!!
123finish!!
要するに、任意のタイミングでprintが出力されない場合にflush引数をTrueにすることで強制的に出力できるようになります。
補足: フォーマット
出力したいデータを文字列に埋め込んで出力することができます。データを文字列に埋め込むには以下のような方法があります。
フォーマット済み文字列リテラル
文字列リテラルの先頭にF、またはfを記述し、文字列中の{}内に出力したいデータを記述します。Python3.6で追加。
name = '太郎'
print(f'名前: {name}さん')
実行結果
名前: 太郎さん
直接{}内にデータを指定することもできます。
print(f'名前: {"田中"}さん 年齢: {20}')
実行結果
名前: 田中さん 年齢: 20
formatメソッド
文字列のformatメソッドを使うことでもデータを埋め込むことができます。文字列中に記述した{}にメソッドの引数で指定したデータが埋め込まれます。
'{} {}'.format(データ1, データ2)
{}にインデックスを指定することも、
'{0} {1}'.format({0}に置換されるデータ1, {1}に置換されるデータ2)
キーワードで指定することもできます。
'{keyword1} {keyword2}'.format(keyword1=データ1, keyword2=データ2)
サンプル
試しに文字列中にデータを埋め込んで出力してみます。
name = '太郎'
age = 20
print('名前: {}さん, 年齢: {}歳'.format(name, age))
print('名前: {0}さん, 年齢: {1}歳'.format(name, age))
print('名前: {name}さん, 年齢: {age}歳'.format(name=name, age=age))
実行結果
名前: 太郎さん, 年齢: 20歳
名前: 太郎さん, 年齢: 20歳
名前: 太郎さん, 年齢: 20歳
%記法
文字列中に記述した%sや%dなどの変換指定子の箇所にデータを埋め込むことができます。
'変換指定子' % データ
複数のデータを置換する場合は以下のように指定します。
'変換指定子1 変換指定子2' % (データ1, データ2)
サンプル
試しに文字列中にデータを埋め込んで出力してみます。
name = '太郎'
age = 20
print('名前: %sさん, 年齢: %d歳' % (name, age))
実行結果
名前: 太郎さん, 年齢: 20歳
まとめ
この記事では、Pythonのprint関数の使い方を解説しました。print関数を使うことでオブジェクトを標準出力し、デバッグするだけでなく、ファイルに書き込んだりすることもできます。
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ