「print関数」、それはPythonの処理において文字列や数値などを表示する際に利用されるとても重要な関数の1つです。
文字列や数値以外にも辞書やリストなどのさまざまな方式での出力が可能なため、処理の途中経過やプログラムの正常動作を確認する際などに活用されます。
本記事ではそんな「print関数」の基礎から応用までをわかりやすく紹介していきます。
目次
1.Pythonのprint関数とは
Pythonにおけるprint関数は「引数に入力された内容を標準出力に表示する際に使用される関数」です。デバッグやエラー、警告などのさまざまな情報を表示する際に使用され、プログラミングでもとても重宝する関数と言えるでしょう。
Python2とPython3におけるprint関数の違い
「print関数」と紹介してきましたが、このように呼ぶのは基本的に「Python3」からになります。その理由は「Python2」と「Python3」での記述方式の違いです。
例として「Hello」と表示したい場合を紹介します。
【Python2の場合】
print “Hello”
【Python3の場合】
print(“Hello”)
上記からもわかる通り、Python2では「文」として記載しますが、Python3では「関数」として記載されるのです。
Python2はすでにサービスが終了しているため、今回はPython3のprint関数についての紹介になりますが、覚えておくと良いでしょう。
対応するデータ型
printでは以下のような複数のデータ型に対応しております。
文字列
数値(整数、浮動小数点数)
真偽値(True, False)
リスト(配列)
辞書
タプル
集合
日付
基本的には上記のデータ型を出力する際に使用されますが、他にもメソッドの戻り値などを表示することも可能です。
※メソッドとは「複数の処理や機能をまとめたもの」を指し、基本的には入力に対する出力を返す「関数」と近い意味合いで利用される用語になります。
主な用途
冒頭でも少し触れましたが、主な用途は「処理の途中経過」と「プログラムの正常性と異常性」の確認になります。
基本的にプログラミングでは明確に出力を行わない限りは処理が「どこまで進んでいるのか」「正常に動作しているのか」を知ることはできません。そのため、重要な処理の後や処理の進行状況をリアルタイムで確認する際に「print」を使用するのです。
そうすることで実行したプログラムで想定外のことが起きても、「print」で出力した内容をもとに修正や改善を行えるようになります。
プログラミング作業では「デバッグ」「テスト」などの確認作業で重宝されていると覚えておくと良いでしょう。
2.print関数の基礎
print関数は基本的に括弧の中に表示したい内容を記載することで出力を指定します。
Python3でprintは関数なので、入力と出力が必要です。
関数における入力とは「引数(出力に必要な入力情報)」、出力を「戻り値(関数の処理結果)」といいます。
print関数では「表示したい内容」と「出力方法」を引数に指定することが基本です。
主な引数は以下になります。
引数 | 概要 | デフォルト値 |
---|---|---|
出力したいデータ | 文字列、数値、変数、リスト、タプル、辞書などのさまざまなデータを指定できます。複数のデータを指定することも可能です。 | 指定必須のためなし |
sep | 出力データが複数ある場合の区切り文字を指定できます。 | 空白 |
end | データの末尾に出力する文字を指定可能です。 | 改行コード('\n') |
file | ファイルオブジェクトでデータの出力先を指定できます。 | 標準出力(sys.stdout) |
flush | バッファの処理を止め、強制的に出力するか否かをTrue/Falseで指定可能です。処理中に複数のprintがある場合に使用できます。 | False |
ここからは基礎的な出力についてそれぞれ見ていきましょう。
文字列、数値、リストなどの各データ型の出力
それぞれのデータ型での出力をいくつか紹介します。
【文字列】
print('Hello World') or print(“Hello World”)
Hello World |
※「’」「”」のどちらで囲っても結果は同じです。
【数値】
print(100) print(1.0)
100 1.0 |
【リスト(配列)】
print([0, 1, 2])
[0, 1, 2] |
【辞書】
print({'a': 0, 'b': 1, 'c': 2})
{'a': 0, 'b': 1, 'c': 2} |
【文字列/数値の補足】
print(“1.00”) print(1.00)
1.00 1.0 |
小数点以下に複数の「0」を引数として渡した場合、文字列ではそのまま出力されますが、数値では小数点以下に「0」をいくつ記載しても省略して出力されます。
文字列以外の型はそれぞれが持つ「__str__()」というメソッドが決められていますので、興味があれば調べてみるのも良いでしょう。
変数での出力
printに直接記載する方法以外にも、変数に格納して出力することもできます。
【文字列】
str = 'Hello World' print(str)
Hello World |
【数値】
num1 = 100 num2 = 1.0
print(num2)
100 1.0 |
【リスト(配列)】
list = [0, 1, 2] print(list) print(list[0])
[0, 1, 2] 0 |
※リストの場合はインデックスの指定により、指定の要素の値が取得可能です。
【辞書】
dict = {'a': 0, 'b': 1, 'c': 2} print(dict) print(dict[‘a’])
{'a': 0, 'b': 1, 'c': 2} 0 |
※辞書の場合はキーを指定することで指定の値を取得することができます。
改行コードありでの出力
文字列の出力では改行コード('\n')を記述することで指定の位置で改行をすることが可能です。
例)
str = 'Hello World\nPython' print(str)
Hello World Python |
※ちなみに前述にもあるようにデフォルトで末尾には改行コード('\n')が追記されるため、printの実行ごとに改行は行われます。
複数の値での出力
これまでは1つの値を出力する場合について紹介してきました。ここでは複数の値を使用する場合についてを見ていきましょう。
例)
print('私の生まれは', '九州', 'の方です。') print('私の生まれは' + '九州' + 'の方です。')
私の生まれは 九州 の方です。 私の生まれは九州の方です。 |
上記からわかるように複数の値をカンマ区切りで入力するとそれぞれの文字の間に空白が追加されて出力されます。対して、複数の値をプラス演算子を使用して入力すると、1つの文字列として解釈されるため、つながった状態で出力されるのです。
区切り文字指定(sep)を使用した出力
ここでは複数の値を指定した場合の区切り文字を指定する引数「sep」について紹介していきます。この引数は複数の値をカンマ区切りで入力した場合に有効です。
例をもとに機能を確認していきましょう。
例)
# sep無効 print('私の生まれは' + '九州' + 'の方です。', sep=‘\\’)
print('私の生まれは', '九州', 'の方です。', sep=‘--’) print('私の生まれは', '九州', 'の方です。', sep= ‘\n’)
# sep無効 私の生まれは九州の方です。※カンマ区切りでないため無効
私の生まれは--九州--の方です。 私の生まれは 九州 の方です。 |
上記のようにカンマ区切りでない場合には意味を持ちませんが、カンマ区切りがある場合には指定した区切り文字を追加して出力してくれます。
末尾文字指定(end)を使用した出力
次に紹介するのは複数回print関数を記述する場合などに使用する「end」です。
例をもとに機能を確認していきましょう。
例)
# end指定なし print(‘Hello World’) print(‘Python’)
print(‘Hello World’, end=’,’) print(‘Python’)
# end指定なし Hello World Python
Hello World,Python |
標準では改行コードが追加されるため、print毎に改行しますが、endを指定した場合には改行コードが指定した値に置き換わるため改行が起こらないのです。
【補足】
print(‘Hello World’, end=',') print(‘Python’)
Hello World,Python |
改行に限ってはprintの後にカンマを入れることで回避が可能なので使い分けるといいでしょう。
特定のファイルに出力(file)
print関数は標準出力以外にも特定のファイルへ出力することもできます。
具体的には以下のような処理です。
with open('example.txt', 'w') as s: print('Hello World,Python', file=s)
Hello World,Python (example.txtに出力(書き込まれる)) |
こちらの処理は「file」に渡すファイルオブジェクトを「with」で作成します。ファイルオブジェクトは「open」の引数の1つ目にファイルパス、2つ目に「w(書き込み)またはa(追記)」を入力することでファイルに指定の値を出力(書き込み)が可能です。
各print処理ごとに強制的に出力(flush)
デフォルト(flush=False)の場合、print関数がいくつか記載されていると処理をすべて終えてから表示したい値の出力が行われます。flushをTrueにすると、他の処理の実行を待たずに指定したprint処理ごとに強制的な出力が可能です。
具体的に解説すると以下のようになります。
# デフォルトの場合 # ここに処理①を記載 print(‘Hello World’) # ここに処理②を記載 print(‘Python’) # 両方の処理が終了後、2つ一緒にprint関数での出力
# ここに処理①を記載 print(‘Hello World’, flush=True) # 処理②を待たずにここで出力 # ここに処理②を記載 print(‘Python’, flush=True) # 両方の処理が終了後、2つ一緒にprint関数での出力 |
関連記事
Pythonとは?コードの具体例など人気プログラミング言語を初心者にわかりやすく解説
Python配列完全ガイド|初期化・追加・操作・要素数・二次元化から配列操作・連想配列まで徹底解説
3.print関数の応用テクニック
基礎を学んだ上でここからはprint関数を使用した応用的な出力についての紹介です。
printf形式(%記法)の利用
printf形式では、書式化演算子%を使用して書式の設定をすることができます。書式化演算子%は変数で置き換えることができ、文字列は「%s」、数値は「%d」で書式設定が可能です。「%s」「%d」は変換指定子と呼ばれます。
具体的な例でみていきましょう。
基本的な使い方は以下のようになります。
str = 'michael' num = 20 print(‘私の名前は%s、年齢は%d歳です。' %(str, num))
私の名前はmichael、年齢は20歳です。
|
【桁数指定】
str = 'michael' num = 20 print(‘私の名前は%9s、年齢は%5d歳です。' %(str, num))
私の名前は michael、年齢は 20歳です。 |
上記のように変換指定子の%の後に数字を記載することで桁数を指定し、足りない桁数を空白で埋めて、右寄せで表示されます。他にも左寄せや埋める文字の指定などが可能です。
【桁数指定+左寄せ】
str = 'michael' num = 20 print(‘私の名前は%-9s、年齢は%-5d歳です。' %(str, num))
私の名前はmichael 、年齢は20 歳です。 |
【桁数指定+0埋め】
str = 'michael' num = 20 print(‘私の名前は%9s、年齢は%05d歳です。' %(str, num))
私の名前は michael、年齢は00020歳です。 |
このprintf形式は現在では古い形式とされているため、後述の「format()メソッド」「f文字列(f-string)」を使用する場合がほとんどですが、覚えておくといいでしょう。
format()メソッドによる書式設定
format()メソッドはpython2.6から実装された組み込み関数(インストール語すぐに使用可能な関数)で、文字列の中に記載した置換フィールド「{}」を指定した引数で変換することができます。
コード例を見ていきましょう。
fruit = 'ブドウ' price = 1000 print('{}の値段は一房{}円になります。'.format(fruit, price))
ブドウの値段は一房1000円になります。 |
置換フィールド「{}」にインデックスや文字列を指定することで変換することも可能です。
【インデックス】
fruit = 'ブドウ' price = 1000 print('{0}の値段は一房{1}円になります。リンゴも同様に{1}円で売られています。'.format(fruit, price))
ブドウの値段は一房1000円になります。リンゴも同様に1000円で売られています。 |
インデックスに「0」を指定すると、引数に指定した1つ目の変数で置換し、「1」を指定すると2つ目で置換というように引数に指定した変数で置き換える位置を指定することができます。
【文字列】
fruit = 'ブドウ' price = 1000 print('{str}の値段は一房{num}円になります。'.format(str=fruit, num=price))
ブドウの値段は一房1000円になります。 |
置換フィールド内に指定した文字列で置換する場所を指定する方法です。置換対象の位置がどのような値で置換されるかを明確にしたい時などで使用されます。
【補足】
fruit = 'ブドウ' price = 1000 print('{}の値段は一房{}円になります。{{ブドウの価格}}'.format(fruit, price))
ブドウの値段は一房1000円になります。{ブドウの価格} |
上記のように「{}(波括弧)」をそのまま出力したい場合は同じく波括弧で囲うことで出力が可能です。
f文字列(f-string)の活用
Python3.6から登場したのが「f文字列(f-strings)」で文字列の前にfまたはFを記載し(f'xxx', F'xxx')、文字列中の置換フィールドに変数をそのまま記述できます。
先ほどの「format()」での例をこちらの方法で記載した場合で見ていきましょう。
fruit = 'ブドウ' price = 1000 print(f'{fruit}の値段は一房{price}円になります。') or print(F'{fruit}の値段は一房{price}円になります。')
ブドウの値段は一房1000円になります。 |
他の方法では置換する位置と引数を指定する順番に気を付ける必要がありましたが、この方法ではそれが必要ないため、簡単に記載することができます。
文字列の書式指定
format()やf文字列ではprintf形式とは別の方法で書式設定が可能です。
その種類と具体例は以下のようになります。
記号 | 意味 | 例(num=255とする) |
---|---|---|
< | 左寄せ | print('左寄せ:{:_<10}'.format(num))
左寄せ:255_______ |
^ | 中央寄せ | print('中央寄せ:{:_^10}'.format(num))
中央寄せ:___255____ |
> | 右寄せ | print('右寄せ:{:_>10}'.format(num))
右寄せ:_______255 |
0 | ゼロ埋め | print('ゼロ埋め:{:010}'.format(num))
ゼロ埋め:0000000255 |
+ | プラス符号表示 | コード: print('プラスの時も符号表示:{:+010}'.format(num))
プラス時も符号表示:+000000255 |
b | 2進数表記 | コード: print('2進数表記:{:b}'.format(num))
2進数表記:11111111 |
o | 8進数表記 | コード: print('8進数表記:{:o}'.format(num))
8進数表記:377 |
x | 16進数表記(英語は小文字) | コード: print('16進数表記(a~fは小文字):{:x}'.format(num))
16進数表記(a~fは小文字):ff |
X | 16進数表記(英語は大文字) | コード: print('16進数表記(A~Fは大文字):{:X}'.format(num))
16進数表記(A~Fは大文字):FF |
これらはprint関数以外にも文字列の出力などで活用することも可能なため、状況によって使い分けられるようにしておきましょう。
番外編:pprint
printとは別にはなりますが、Pythonにはリストや辞書など見やすい形式に変換して出力する「pprint」というモジュールがあります。これは「pretty print(直訳:きれいな出力)」の略で以下のように使用します。
# まずはインポートを行う import pprint
{'Name': 'Tanaka', 'Age': 17, 'Class': '3-B'}, {'Name': 'Hashimoto', 'Age': 15, 'Class': '1-C'}]
print(member)
pprint.pprint(member)
# 通常のprint [{'Name': 'Satou', 'Age': 16, 'Class': '2-A'},{'Name': 'Tanaka', 'Age': 17, 'Class': '3-B'},{'Name': 'Hashimoto', 'Age': 15, 'Class': '1-C'}]
[{'Name': 'Satou', 'Age': 16, 'Class': '2-A'}, {'Name': 'Tanaka', 'Age': 17, 'Class': '3-B'}, {'Name': 'Hashimoto', 'Age': 15, 'Class': '1-C'}] |
pprintでは以下のような引数が用意されており、それぞれ表示形式を変更することが可能です。
引数 | 概要 | デフォルト値 | 例 |
---|---|---|---|
width | 1行当たりの文字数を指定 | 80 | コード: pprint.pprint(member, width=30)
[{'Name': 'Satou', 'Age': 16, 'Class': '2-A'}, {'Name': 'Tanaka', 'Age': 17, 'Class': '3-B'}, {'Name': 'Hashimoto', 'Age': 15, ‘Class': '1-C'}] ※指定した文字数を基準に見やすく変換されます |
depth | 出力する要素の深さを指定 | None | コード: pprint.pprint(member, depth=1)
[{...}, {...}, {...}] |
indent | 表示する際のインデントを指定 | 4 | コード: pprint.pprint(member,indent=4, width=30)
[ { 'Name': 'Satou', 'Age': 16, 'Class': '2-A'}, { 'Name': 'Tanaka’', 'Age': 17, 'Class': '3-B'}, { 'Name': 'Hashimoto', 'Age': 15, ‘Class': '1-C'}] |
リストや辞書型などの要素が多いデータを使用する場合には使用を検討するのも良いでしょう。
関連記事
【Python初心者向け】Pythonで作れるものや入門用のサンプルコード、おすすめの参考書を紹介!
Pythonとは?何ができるかや入門用の基本的な書き方などわかりやすく解説
4.まとめ
今回はPythonのprint関数の基礎と応用について紹介しました。デバッグやエラーなどの記録を残す際やプログラム作成者以外がメンテナンスする際などでも重宝する処理です。
また、記載方法を統一することで作業の効率化やヒューマンエラーの防止も期待できるため正しく利用できるように学習を進めてみてください。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。