printは文字列や数値などを画面に出力する関数で、非常に便利でpythonのプログラミングに欠かせない関数になります。
printは、様々な場面で利用され、画面にメッセージを表示するだけでなく、記述したプログラムが正常に動作するか確認する際に、printで変数などに格納された値を画面に出力し、正しく想定された値が格納されているかを確認するのにも利用します。
このページでは、printが実際にどのように使われるか、具体的な例も交えながら見ていきましょう。
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!
Pythonにおけるprint関数の使い方
printは文字列を画面に出力する関数で、以下のように記述します。
主な引数は、
引数 | 必須/任意 | 説明 |
出力するデータ | 必須 | printで出力するデータを文字列、数値、変数、リスト、タプル、辞書などで指定。 複数のデータを指定することもできます。 |
sep | 任意 | 複数のデータを出力する場合の区切り文字を指定 ※何も指定しなければ、空白になります。 |
end | 任意 | printでデータを出力した後(末尾)に出力するものを指定 ※何も指定しなければ、改行コードが指定されます。 |
file | 任意 | 出力対象のファイルオブジェクトを指定。 詳細は後の章で解説いたします。 |
flush | 任意 | バッファの処理を止め強制的に出力するか否かをTrue/Falseで指定。 ※何も指定しなければ、Falseになります。 |
※それぞれの引数については、後の章で1つ1つ詳しく解説していきます。
まず初めに簡単な例を確認しましょう。文字列"Hello"や数値123を出力したい場合、次のように記述します。
1 2 | print("Hello") print(123) |
123
print関数による変数に格納された値の出力
printでは、直接出力したい文字列を渡してその内容を表示するだけでなく、変数に格納した文字列や数値を出力することもできます。
文字列"Hello"を変数stringに格納し、数値123を変数numberに格納します。これら変数string、変数numberの値を出力したい場合、次のように記述します。
1 2 3 4 | string = "Hello" number = 123 print(string) print(number) |
123
Jupyter Notebook(ジュピター・ノートブック)※1ではセルに変数を入力することで、変数に格納した値を確認することができますが、1つのセルに複数の変数を入力しても、最後の変数の値しか表示されません。そのような場合にprintを利用すると、全ての変数の値を確認することができます。
※1 Jupyter Notebookとは、ブラウザ上で動作するプログラムの対話型実行環境です。データ分析には欠かせないツールの1つです。Jupyter Notebookの詳しい説明は、「図解!Jupyter Notebook徹底解説!」を参照ください。
また+(プラス演算子)を利用して、複数の文字列を連結・結合して出力することもできます。
1 2 3 | string1 = "Hello" string2 = "Good Bye" print(string1 + "," + string2) |
数値と文字列を合わせて表示したい場合は、数値を文字列に変換する必要があります。ここではstrで数値を文字列に変換しています。
1 2 3 | product_name = "electric oven" price = 21000 print(product_name + ": " + str(price)) |
print関数によるリスト、タプル、辞書の出力(アスタリスクによる各要素の展開)
printでは、リスト、タプル、辞書も出力することもできます。それでは、それぞれの例を見ていきましょう。
まずはリストから始めます。リスト["a", "b", "c", "d", "e"]を変数mylistに格納しprintで出力します。
1 2 | mylist = ["a", "b", "c", "d", "e"] print(mylist) |
リストの3番目の要素だけをprintで出力します。リストの要素のカウントは0から始まりますので、3番目の要素はmylist[2]と指定します。
1 | print(mylist[2]) |
また*(アスタリスク)を付けることにより、リスト["a", "b", "c", "d", "e"]の各要素を展開し出力することもできます。
1 | print(*mylist) |
タプルもリストと同様にprintで出力できます。
1 2 | mytuple = (1, 2, 3, 4, 5) print(mytuple) |
またタプルも*(アスタリスク)を付けることにより、各要素を展開し出力することもできます。
1 | print(*mytuple) |
今度は辞書を出力してみましょう。辞書{"A01":"TV", "A02":"printer", "A03":"scanner"}を変数mydictに格納しprintで出力します。
1 2 | mydict = {"A01":"TV", "A02":"printer", "A03":"scanner"} print(mydict) |
辞書のキー"A02"の要素だけをprintで出力します。
1 | print(mydict["A02"]) |
辞書に*(アスタリスク)を付けるとどうなるでしょうか。
1 | print(*mydict) |
辞書のキーだけが展開されて表示されました。
辞書にキーだけでなく、値も含めて表示したい場合、次のように記述します。
1 2 | for key, value in mydict.items(): print(key, value) |
A02 printer
A03 scanner
for文を使って辞書の各要素を順に取り出して出力します。辞書のキーと値は、item()により、分けて取得されます。
for文の詳しい説明は、「図解!Python for ループ文の徹底解説」を参照ください。
print関数による複数の変数の出力と引数sepの指定(カンマ区切りなど)
Printでは、複数の文字列や数値、変数を出力することができます。引数として、出力対象のものをカンマで区切って渡します。
また任意の引数としてsepに対して区切り文字を渡すこともできます。指定しなければ、空白が区切り文字として使用されます。
文字列"Hello"を格納した変数string、数値123を格納した変数number、文字列"ABC"をprintに渡し、出力してみましょう。その際に引数sepに", "を渡し、カンマで区切って出力します。
1 2 3 | string = "Hello" number = 123 print(string, number, "ABC", sep=", ") |
print関数で改行あり/改行なしを制御して出力(引数endの指定や改行コードの挿入)
末尾での改行あり/改行なしを制御する方法
Printでは、任意の引数として、末尾に出力する文字を指定することもできます。
何も指定しなければ、改行コード"\n" (バックスラッシュ+n)が末尾に出力されます。
文字列"Hello"と数値123を、それぞれprintで出力します。
1 2 | print("Hello") print(123) |
123
引数endを指定しなければ、改行コード"\n"が末尾に出力され、2つ目のprintの結果は、自動的に改行されて出力されます。
次にprintの引数として、end = ","(カンマ)を渡してみます。
1 2 | print("Hello", end = ",") print(123) |
今度は改行されずにカンマが出力されました。
文中で改行する方法
また文中で改行したい場合、文中に改行コード"\n" (バックスラッシュ+n)を挿入することで、指定した箇所で改行することができます。
例えば、"Hello World!!"を"Hello"と"World!!"で改行して出力したい場合、間に"\n"を挿入することで改行して出力することができます。
1 | print("Hello \n World!!") |
World!!
print関数でファイル出力・保存する方法
Printでは、任意の引数として、fileを指定することもできます。
またファイルオブジェクトは次のようにして作成することができます。
作成したファイルオブジェクトはクローズする必要がありますが、上記のようにwithブロックで記述すると、withブロックが終わると自動的にクローズされます。
またファイルのパスと合わせて、openには引数として”w”を渡すことで、書き込みモードでファイルが開かれます。もしテキスト無ければ新規作成されてから開かれます。
例えば、カレントディレクトリ(現在実行中のディレクトリ)にtest.txtという名前でファイルを作成し、printで”Hello World!!”と出力・保存する場合は、次のように記述します。
1 2 | with open("test.txt", "w") as f: print("Hello World!!", file = f) |
ここでは、ファイルオブジェクトに”f”という名前を付けて、printの引数fileに渡しています。
カレントディレクトリに作成されたtest.textを確認すると、次のテキストが出力されていることを確認することができます。
同じファイルに複数のテキストを出力する場合、続けてprintを記述します。
1 2 3 4 | with open("test2.txt", "w") as f: print("Hello World!!", file = f) print("This is a really good World!", file = f) print("I am so happy.", file = f) |
ファイルへの出力結果は、次のようになります。
This is a really good World!
I am so happy.
print関数でフラッシュ(flush)によりバッファを強制的に即時出力する方法
Printで出力する内容は、バッファに蓄積され出力されるまでに時間がかかることがあります。処理の中にいくつかのprintが記述されていても、全ての処理が終わってから、まとめて出力されることがあります。
これらのバッファの処理を止め、各printの処理時に強制的に出力するよう指定するのが、printの引数flushになります。
printでは、任意の引数flushにTrueを指定すると強制的に出力されます。
何も指定しなければ、 デフォルトではFalseになっています。
例えば、文字列“フラッシュのテストです。”を即時出力したい場合、引数flushにTrueを指定します。
1 | print("フラッシュのテストです。", flush=True) |
print関数でエスケープシーケンスを使い特殊文字(ダブルクォーテーションなど)を表示する方法
Pythonでは、改行やタブなど特殊な文字を表すのにエスケープシーケンスを使って記述します。
また文字列はシングルかダブルクォーテーションで囲って示されますので、これらのクォーテーションを利用したい場合もエスケープシーケンスを使って記述する必要があります。
次の表が主なエスケープシーケンスの例になります。
記号 | 意味 |
\' | シングルクォーテーション(')を表示 |
\" | ダブルクォーテーション(")を表示 |
\n | 改行 |
\r | 同じ行の先頭に戻る |
\t | 水平タブ |
\\ | \を表示 |
\? | ?を表示 |
これらのエスケープシーケンスは、print関数でも利用することができます。
例えば、文字列 He said “Hello World!” をprintを使って表示する場合、ダブルクォーテーションを表示するエスケープシーケンス\”を用いて記述します。
1 | print("He said \"Hello World!\"") |
また文字列の途中で改行を入れたい場合、改行を表示するエスケープシーケンス\nを用いて記述します。
1 | print("Line1 \nLine2 \nLine3"") |
'Line2'
'Line3'
パーセントを用いた変換指定子(%d, %sなど)の使い方
ある文字列の中に変数に格納された数値や文字列を表示したい場合、「%d」や「%s」などの変換指定子を利用して記述することもできます。
変換指定子の種類はいくつかあり、その中でも特に良く使うのが、変数が文字列の時に使う「%s」、整数値の時に使う「%d」になります。
変換指定子の書式は以下の通りです。
printで出力したい文字列の中で、変数の値を表示したい箇所に%sや%dを挿入します。そして文字列の後に、%と挿入する変数を記載します。
変数が整数値の時に使う「%d」の使用例は次のようになります。
1 2 3 | product_name = "electric oven" sales_amount = 21000 print(product_name + "の売上は、%d円です。" % sales_amount) |
また変換指定子を用いて複数の変数を出力したい場合は、タプル型を利用します。タプル型については別の記事で詳しく説明しますが、( ) 括弧に要素を記述した配列のようなものと思って下さい。各要素間はカンマで区切られています。
タプルの詳しい説明は、「Pythonにおけるタプルの使い方」を参照ください。
ここでは文字列型の変数product_nameと整数型の変数sales_amountをタプルに格納して、それぞれ「%s」、「%d」で表示しています。
1 2 3 | product_name = "electric oven" sales_amount = 21000 print("%sの売上は、%d円です。" % (product_name, sales_amount)) |
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!
formatの使い方
formatを使って文字列の間に、任意の文字列や数値、変数を出力する方法も紹介します。formatの書式は以下の通りです。
文字列の中の挿入したい箇所に{0}を入力します。すると、{0}の位置にformatの引数になっている出力対象の文字列や数値、変数の値が表示されます。
1 2 | sales_amount = 21000 print(“electric ovenの売上: {0}”.format(sales_amount)) |
formatで複数の文字列、数値、変数を出力
printで表示するものが複数ある場合は、{0}, {1}, {2}….と{}を増やしていきます。そして、formatの引数にformat(出力対象のもの1, 出力対象のもの2, 出力対象のもの3…..)と変数を追加します。
出力対象のもの1の値が{0}に、出力対象のもの2の値が{1}に、というように順に代入されます。
以下が複数の変数をformatで表示する例です。
1 2 3 4 5 6 7 | product_name1 = “electric oven” product_name2 = “TV” sales_amount1 = 21000 sales_amount2 = 48000 print(“{0}の売上: {1}, {2}の売上: {3}”. format(product_name1, sales_amount1, product_name2, sales_amount2)) |
表示したいものが複数ある場合は、{0}, {1}, {2}….と{}を増やすこともできますが、出力対象のものの数が増えてくると、数値ではformat()に記述したものとの対応関係が分かりづらくなります。
その際には、出力するものに対して名前を付け、キーワード引数という形でformatに渡すこともできます。キーワード引数に名前を付けることで、対応関係を分かりやすくすることができます。
表示するものが複数ある場合は、{キーワード引数1}, {キーワード引数2}, {キーワード引数3}….と{}を増やしていきます。そして、formatの引数にformat(キーワード引数1=出力対象のもの1, キーワード引数2=出力対象のもの2, キーワード引数3=出力対象のもの3…..)とキーワード引数と出力する内容を追加していきます。
以下がキーワード引数を利用して複数の変数をformatで表示する例です。
1 2 3 4 5 6 7 8 9 | product_name1 = "electric oven" product_name2 = "TV" sales_amount1 = 21000 sales_amount2 = 48000 print("{prod1}の売上: {sales1}, {prod2}の売上: {sales2}". format(prod1 = product_name1, sales1 = sales_amount1, prod2 = product_name2, sales2 = sales_amount2)) |
formatで小数点以下の桁数の指定方法
formatで小数点以下の桁数を指定する方法は、次のようになります。
{ } の箇所に{:. 桁数f}と書きます。桁数の所に、表示したい桁数を数値で指定してください。
例えば、小数点以下1位まで表示する場合、{:.1f}と記述します。
1 2 | sales = 123.45678 print("{:.1f}".format(sales)) |
また小数点以下3位まで表示する場合、{:.3f}と記述します。
1 2 | sales = 123.45678 print("{:.3f}".format(sales)) |
formatで数値をパーセント表示する方法
formatで数値をパーセント表示する方法は、次のようになります。
また小数点以下の表示桁数も合わせて指定したい場合は、次のように記述します。
桁数の所に、表示したい桁数を数値で指定してください。
例えば、小数点以下1位まで表示する場合、{:.1f}と記述します。
1 2 | gross_margin = 0.23456 print("{:.0%}".format(gross_margin)) |
また小数点以下2位まで表示する場合、{:.2f}と記述します。
1 2 | gross_margin = 0.23456 print("{:.2%}".format(gross_margin)) |
formatで数値を3桁毎にカンマで区切って表示する方法
桁数が多い数値を見やすくする為、formatで数値を3桁毎にカンマで区切ってする方法は、次のようになります。
数値123456789を3桁毎にカンマで区切って表示してみましょう。
1 | print("{:,}".format(123456789)) |
formatで数値の符号(プラス・マイナス)を表示する方法
数値において符号のマイナスは基本的には表示されますが、プラスは表示されません。プラスも表示したい場合、次のように記述します。
数値1.23を表示します。
1 | print("{:f}".format(1.23)) |
プラスの符号が付いていません。
今度は、プラスの符号を付けて表示してみましょう。
1 | print("{:+f}".format(1.23)) |
formatで左揃え、中央揃え、右揃えの指定方法
formatで左揃え、中央揃え、右揃えは、次のように指定します。
左揃え:
右揃え:
中央揃え:
それぞれ{ }内の赤太字の箇所が変わります。
また桁数は表示する桁数になり、それ以外はスペースで埋められます。例えば、桁数に10を指定し、右揃えで4つの文字ABCDを表示すると左側に空白が6つ付いて' ABCD'と表示されます。
文字列"ABCD"を中央揃えで表示する場合は、次のように記述します。
1 | print("{:^10}".format("ABCD")) |
同様に左揃えで表示します。
1 | print("{:<10}".format("ABCD")) |
今度は右揃えで表示してみましょう。
1 | print("{:>10}".format("ABCD")) |
formatで0(ゼロ)埋めなどの指定方法
formatでゼロ埋めなど、特定の文字や数値で埋めて出力したい場合、次のように指定します。
左揃え:
右揃え:
中央揃え:
{ } 内のアライメントの前に埋める文字や数値を記入します。
数値123を右揃え10桁で表示し、空いた桁数はゼロ埋めで表示してみましょう。
1 | print("{:0>10}".format(123)) |
formatで数値を2進数、8進数、16進数で表示する方法
数値を2進数、8進数、16進数などで表示する方法は、次のようになります。
表示したい進数に合わせて、進数の箇所に次の文字を設定してください。b(2進数)、o(8進数)、d(10進数)、x(16進数)
数値200を2進数、8進数、10進数、16進数で表示します。
1 | print("{0:b} {0:o} {0:d} {0:x}".format(127)) |
formatで表示形式を指定して現在日時(日付、時刻)を表示する方法
Formatで日付の表示形式(yyyy/mm/ddなど)を指定して現在日時を表示する方法を確認していきましょう。
まずは日付の表示に必要なdatetimeをインポートします。
次に現在日時をdatetime.datetime.now()を使って取得します。ここでは取得した値を変数nowに格納しています。
そして、日付の表示形式を指定し、現在日時を表示します。
日付の表示形式は、%Y%m%dなど、次の記号で指定します。
%b:月名の短縮形(Mar、Aprなど)
%d:0埋めした10進数の日にち(01、02など)
%Y:西暦4桁の10進表記(2019、2020など)
主な記号の一覧です。
記号 | 説明 |
%d | 0埋めした10進数の日にち 01、02など |
%m | 0埋めした10進数の月 01、02など |
%y | 西暦2桁の10進表記 19、20など |
%Y | 西暦4桁の10進表記 2019、2020など |
%H | 24時間表記の時 |
%I | 12時間表記の時 |
%M | 2桁の分 |
%S | 2桁の秒 |
%f | 6桁のマイクロ秒 |
それでは例として、本日の日付をyyyy/mm/ddの形式で出力してみます。
1 2 3 | import datetime now = datetime.datetime.now() print("{:%Y/%m/%d}".format(now)) |
結果として2020/01/19と、指定したyyyy/mm/ddの形式で表示されました。