この記事では、Pythonの基本的な処理である「print」の使い方について説明します。
Pythonのprintとは?
print
とは、Pythonで用意されている出力関数です。表示したい文字列や数値、真偽値などの値を画面に表示します。デバッグやエラー出力など様々な場面で使用される、非常に便利でプログラミングには欠かせない関数です。
また、printはPython2とPython3で書き方が異なります。例えば「Hello World!」と出力したい場合、以下のように記述します。
# Python2
print "Hello World!"
# Python3
print("Hello World!")
このようにPython2はprint文ですがPython3はprint関数です。現在はPython2からPython3への移行が推奨されていることから、この記事ではPython3のprint関数について説明していきます。
基本的な使い方
printは上記のようにprint()
の括弧の中に表示したい値を記述することで指定した値が出力されます。
Python3でprintは出力処理を行う関数です。出力に必要な材料=引数を指定し、処理が行われた結果が戻り値として表示されます。出力したいデータを引数に指定することがprint関数の基本です。出力データだけではなく、様々な出力方法について指定することができます。
print関数の主な引数は以下の通りです。
引数 | 内容 | 何も指定しない場合 |
---|---|---|
出力したいデータ | 文字列、数値、変数、リスト、タプル、辞書など出力したいデータを指定。複数指定可能。 | (指定必須) |
sep | 出力データが複数ある場合の区切り文字を指定。 | 空白 |
end | データ出力後、末尾に出力するものを指定。 | 改行コード('\n') |
file | データの出力先ファイルをファイルオブジェクトで指定。 | sys.stdout(標準出力) |
flush | 処理の中にprintがいくつかある場合に、バッファの処理を止めて各print処理の際に強制的に出力するか否かをTrue/Falseで指定。 | False |
これらの引数の使い方については次の項目から具体的に説明します。
実際に出力してみよう
ここからはprintを使って実際に出力していきます。
文字列を出力する
文字列を出力する際は、データを「”(ダブルクォーテーション)」または「’(シングルクォーテーション)」で囲みます。
print("Hello")
#実行結果
#Hello
print('Hello')
# 実行結果
# Hello
数値を出力する
数値を出力する際は、データをそのまま記述します。
print(100)
# 実行結果
# 100
小数部分がある場合は以下のように出力されます。小数点以下が全て0の場合は小数第一位までが出力されます。
print(1.2400)
# 実行結果
# 1.24
print(1.00)
# 実行結果
# 1.0
変数を出力する
変数に格納した値を出力することもできます。例えば、変数i
に格納した文字列や変数n
に格納した数値を出力したい場合、以下のように記述します。
i = 'Hello'
print(i)
# 実行結果
# Hello
n = 100
print(n)
# 実行結果
# 100
list(リスト)、辞書を出力する
print関数は変数に格納したlist(リスト)、辞書も出力できます。print関数を使用することでこれらの中身を見ることができます。
fruits = ['apple', 'orange', 'lemon']
print(fruits)
# 実行結果
# ['apple', 'orange', 'lemon']
prices = {'apple': 100, 'orange': 80, 'lemon': 150}
print(prices)
# 実行結果
# {'apple': 100, 'orange': 80, 'lemon': 150}
インデックスやキーを指定すると要素を取り出して表示できます。上記のリスト、辞書の要素を取り出してみます。
print(fruits[0])
# 実行結果
# 'apple'
print(prices['orange'])
# 実行結果
# 80
また、*
を付けることでリストの中身を展開して表示できます。
print(*fruits)
# 実行結果
# apple orange lemon
辞書に*(アスタリスク)を付けると以下のようにキーのみが表示されます。
print(*prices)
# 実行結果
# apple orange lemon
辞書にキーだけでなく、値も含めて表示したい場合、for文を使って辞書の各要素を順に取り出して出力します。辞書のキーと値は、item()
により、分けて取得されます。
for k, v in prices.items():
print(k, v)
# 実行結果
# apple 100
# orange 80
# lemon 150
ここではリストと辞書の出力について説明しましたが、print関数を用いてタプルを出力することも可能です。
複数の値を出力する
ここまで一つの値の出力について解説してきました。これらは複数を組み合わせて出力することもできます。複数の値を出力する際は「,(カンマ)」で順番に表示させるか、「+(プラス演算子)」で連結させます。
print('私の出身は', '東京都', 'です。')
#実行結果
# 私の出身は 東京都 です。
print('私の出身は' + '東京都' + 'です。')
#実行結果
# 私の出身は東京都です。
このようにプラス演算子を使用した場合は指定した値の間にスペースが入りません。
引数sepで区切り文字を指定する
ここで引数sepについて説明します。sep
は任意の引数で、出力データが複数ある場合に区切り文字を指定することができます。複数の値をカンマ区切りで指定した際、sep
に何も指定しない場合は上記のように半角スペースが表示されます。半角スペースを表示させないためにはsep=’’
と指定します。
print('私の出身は', '東京都', 'です。', sep='')
# 実行結果
# 私の出身は東京都です。
逆にsep
に区切り文字をしてみると以下のようになります。
num1 = 1
num2 = 2
print(num1, num2, sep='---')
# 実行結果
# 1---2
改行コード'\n'
を指定すると値や変数ごとに改行されて出力されます。
print('dog' 'cat', 'bird', sep='\n')
# 実行結果
# dog
# cat
# bird
展開したリストを出力する際にも区切り文字は使用できます。
fruits = ['apple', 'orange', 'lemon']
print(*fruits, sep='-')
# 実行結果
# apple-orange-lemon
引数endで末尾の文字を指定する
引数endについて説明します。end
は任意の引数で、任意の文字列を指定するとその文字列が最後に挿入されます。また引数end
のデフォルト値は改行文字'\n'
です。
#何も指定しない場合
print('apple')
print('orange')
# 実行結果 / デフォルト値である改行が入る
# apple
# orange
# endに文字列を指定
print('apple',end = ',')
print('orange')
# 実行結果
# apple,orange
改行を避ける場合は、end = ''
と指定します。末尾に何も記述しないという意味です。
# 改行を避ける
print('apple',end='')
print('orange')
# 実行結果
# appleorange
複数の変数の区切り文字を指定することもできます。
a = '私の'
b = '夢は'
c = 'サッカー選手です'
# 何も指定しない場合
print(a,b,c)
# 実行結果 / デフォルト値である改行が入る
# 私の
# 夢は
# サッカー選手です
# 改行を避ける場合
print(a,b,c,end='')
# 実行結果
# 私の夢はサッカー選手です
プラス演算子の使用でも、改行や空白を避けて複数の変数の値を出力できます。
print(a + b + c)
# 実行結果
# 私の夢はサッカー選手です
引数fileで特定のファイルに出力する
printは関数は特定のファイルに値を出力することも可能です。with
でファイルオブジェクトを作成して、引数fileに指定します。open()
でファイルを開く際、第二引数mode
はw
(書き込み)またはa
(追記)を指定します。
with open('sample.txt', 'w') as s:
print('test', file=s)
# 実行結果
# test(sample.txtに書き込まれる)
こちらの処理では、open()
でs
と定義したsample.txt
をw
(書き込みモード)で開き、print関数の中で引数file
にs
を指定することでsample.txt
に値を出力しています。
引数flushで各print処理ごとに強制的に出力する
処理の中にprintがいくつかある場合、デフォルト(flush = False
)だと処理を全て終えてからprint関数で表示したい値が出力されます。引数flush
をTrue
に指定することで、全ての処理の実行を待たずに一つ一つの処理ごとに強制的に出力できます。具体的には、以下のようになります。
# ここに処理Aを記述
print("test") #ここでは出力されない
# ここに処理Bを記述
print("finish") #上のprintとまとめて出力
# flush を使うと・・・
# ここに処理Aを記述
print("processing B(flush=True)", flush=True) #ここですぐに表示される
# ここに処理Bを記述
print("finish", flush=True)
変数を含む文字列の書式指定について
任意の文字列の中に変数の値を入れて出力したい場合、次の方法があります。
- %記法
- format()メソッド
- f文字列(f-string)
これらは値に対して、書式(format)を指定して文字列を生成・出力します。書式(format)とは、値を表示する形式のことです。
%記法(printf形式)
printf形式では、書式化演算子%を使用して書式設定を行います。%演算子は変数で置き換えて値を出力することができます。値のデータ型によって記法が異なり、例えば文字列には%s
を、整数には%d
を使います。%s
や%d
を変換指定子と呼び、具体的には以下のように使用します。
s = 'Sushi'
num = 5
print('This is %s. I have %d.' %(s, num)))
# 実行結果
# This is Sushi. I have 5.
このように変数の値が変換指定子によって変換されて出力されます。また桁数を指定することもできます。以下のように桁数を指定し、右寄せで出力されます。
name = 'John'
age = 20
print('僕の名前は%6sです。年齢は%4d歳です。' %(name, age))
# 実行結果
# 僕の名前は Johnです。年齢は 20歳です。
左寄せで出力したい場合はマイナス-
を、0埋めして出力したい場合は桁数の前に0
を記述します。
name = 'John'
age = 20
print('僕の名前は%-6sです。年齢は%07d歳です。' %(name, age))
# 実行結果
# 僕の名前はJohn です。年齢は 020歳です。
%演算子を使用した記法は古い形式で、現在ではより高機能な書式指定方法としてformat()メソッドやf文字列が使われています。
format()メソッド
format()メソッドはpython2.6から追加された組み込み関数です。format()メソッドでは、文字列の中の置換フィールド{}
を引数に指定した変数で置き換えて出力することができます。変数が複数ある場合はカンマ,
で区切ります。
s = 'りんご'
p = 100
print('{}の価格は{}円です。'.format(s, p))
#実行結果
# りんごの価格は100円です。
置換フィールド{}
にインデックスを指定すると引数の位置に応じて値が出力されます。同じ値を繰り返し使いたい場合に便利です。
print('{0}の価格は{1}円です。みかんも{1}円です。'.format(s, p))
# 実行結果
# りんごの価格100円です。みかんも100円です。
また置換フィールド{}
に文字列を指定すると、以下のように指定した値で置き換えられます。
print('{fruit}の価格は{price}円です。'.format(fruit=s, price=p))
# 実行結果
# りんごの価格は100円です。
波括弧をそのまま出力したい場合は{{}}と記述します。
print('{}の価格は{}円です。{{りんご代}}'.format(s, p))
# 実行結果
# りんごの価格は100円です。{りんご代}
f文字列(f-string)
Python3.6からは、「f文字列(f-strings)」が登場しました。f文字列は文字列の前にf
またはF
を置き(f'xxx'
, F'xxx'
)、文字列中の置換フィールドに変数をそのまま指定できます。文字列を囲むのはダブルクォーテーションでもシングルクォーテーションでもどちらでも構いません。format()メソッドでは冗長だった記法がf文字列を使用することでよりシンプルに記述できるようになりました。format()メソッドの説明で使用した例をf文字列でも記述してみます。
s = 'りんご'
p = 100
print(f'{s}の価格は{p}円です。')
# 実行結果
# りんごの価格は100円です。
文字列の書式指定について
format()メソッドやf文字列は、置換フィールド{}
内でコロン:
のあとに書式指定文字列を指定することで値を任意の書式にフォーマットして出力できます。置換フィールドにインデックスや名前を指定する場合はそのあとにコロン:
を記述して書式指定文字列を書きます。例えば以下のような書式を指定することができ、書式のあとには桁数を指定します。
- <:左寄せ
- ^:中央寄せ
- >:右寄せ
- 0:ゼロ埋め
- +:プラスの時も符号表示
- b:2進数表記
- o:8進数表記
- x:16進数表記(a~fは小文字)
- X:16進数表記(A~Fは大文字)
以下の例ではformat()メソッドを使用しますが、f文字列でも同様の記法で書式指定ができます。
num = 255
print('左寄せ:{:_<10}'.format(num))
#実行結果
# 左寄せ:255_______
print('中央寄せ:{:_^10}'.format(num))
#実行結果
# 中央寄せ:___255____
print('右寄せ:{:_>10}'.format(num))
#実行結果
# 右寄せ:_______255
print('ゼロ埋め:{:010}'.format(num))
#実行結果
# ゼロ埋め:0000000255
print('プラスの時も符号表示:{:+10}'.format(num))
#実行結果
# プラス時も符号表示:+000000255
print('2進数表記:{:b}'.format(num))
#実行結果
# 2進数表記:11111111
print('8進数表記:{:o}'.format(num))
#実行結果
# 8進数表記:377
print('16進数表記(a~fは小文字):{:x}'.format(num))
#実行結果
# 16進数表記(a~fは小文字):ff
print('16進数表記(A~Fは大文字):{:X}'.format(num))
#実行結果
# 16進数表記(A~Fは大文字):FF
pprintについて
Pythonにはリストや辞書といったオブジェクトを見やすい形に整形して出力するpprintというモジュールがあります。pprintとはpretty printの略です。直訳すると「きれいな出力」という意味です。pprintは以下のように使います。
# pprintをインポート
import pprint
data = [{'Name': 'John', 'Age': 20, 'Rank': 'A'},
{'Name': 'Cathy', 'Age': 23, 'Rank': 'B'},
{'Name': 'Hanako', 'Age': 15, 'Rank': 'C'}]
# 通常のprint()で出力
print(data)
# 実行結果
# [{'Name': 'John', 'Age': 20, 'Rank': 'A'}, {'Name': 'Cathy', 'Age': 23, 'Rank': 'B'}, {'Name': 'Hanako', 'Age': 15, 'Rank': 'C'}]
# pprint()で出力
pprint.pprint(data)
# 実行結果
# [{'Name': 'John', 'Age': 20, 'Rank': 'A'},
# {'Name': 'Cathy', 'Age': 23, 'Rank': 'B'},
# {'Name': 'Hanako', 'Age': 15, 'Rank': 'C'}]
通常のprint()で出力するとデータが一行で表示されて見づらいですが、pprint()で出力すると、リストの要素ごとに改行が入るため見やすくなります。 また、pprintは引数を指定することができます。一例として、以下の引数について説明します。
引数 | 内容 | 何も指定しない場合 |
---|---|---|
width | 出力幅(一行あたりの文字数)を指定。 | 80 |
depth | 出力する要素の深さを指定。 | None |
indent | インデント幅を指定。 | 1 |
引数widthで出力幅を指定
一行が指定の文字数に収まるように要素ごとに改行されます。デフォルトはwidth=80
です。
pprint.pprint(data, width=30)
# 実行結果
# [{'Name': 'John',
# 'Age': 20,
# 'Rank': 'A'},
# {'Name': 'Cathy',
# 'Age': 23,
# 'Rank': 'B'},
# {'Name': 'Hanako',
# 'Age': 15,
# 'Rank': 'C'}]
大きい値を指定すると改行が挿入されずprint()と同じように出力されます。
pprint.pprint(data, width=300)
# 実行結果
# [{'Name': 'John', 'Age': 20, 'Rank': 'A'}, {'Name': 'Cathy', 'Age': 23, 'Rank': 'B'}, {'Name': 'Hanako', 'Age': 15, 'Rank': 'C'}]
引数depthで出力する要素の深さを指定
指定した値で出力する要素の深さを指定できます。深さとは入れ子になったデータの深さのことです。指定した値より深い要素は省略記号...
で出力されます。デフォルト値はNoneで、何も指定しない場合は全ての要素が出力されます。
pprint.pprint(data, depth=1)
# 実行結果
# [{...}, {...}, {...}]
pprint.pprint(data, depth=2)
# 実行結果
# [{'Name': 'John', 'Age': 20, 'Rank': [...]},
# {'Name': 'Cathy', 'Age': 23, 'Rank': [...]},
# {'Name': 'Hanako', 'Age': 15, 'Rank': [...]}]
引数indentでインデント幅を指定
インデント幅を指定すると以下のように出力されます。デフォルト値はindent=1
です。
pprint.pprint(data, indent=4, width=30)
# 実行結果
# [ { 'Name': 'John',
# 'Age': 20,
# 'Rank': 'A'},
# { 'Name': 'Cathy',
# 'Age': 23,
# 'Rank': 'B'},
# { 'Name': 'Hanako',
# 'Age': 15,
# 'Rank': 'C'}]
まとめ
Pythonの出力関数であるprintの使い方について説明しました。プログラミング学習において出力関数は最初に学びますが、今回説明したように値の出力には様々な方法があります。記法をしっかり押さえて、適切に使いこなせるようになりましょう。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.03.25
API開発ツール「Postman」とは? 導入手順や利用料金について解説
PostmanはPostman社が提供を行うAPIプラットフォームです。
- プログラミング
2023.07.03
プログラミングスクールで学べることとは? 料金から学習内容の違いまで調査
今回はこれからエンジニアを目指す方向けにプログラミング技術を学べるスクールに関して、料金や学習出来る内容の違いなどの調査を行ないました。
- プログラミング
2023.11.26
Git初心者必見!「git reset」と「git revert」の使い分け方
この記事の主な目的は「git reset (ギット リセット)」と「git revert(ギット リバート)」の基本的な使い方と、それぞれの適切な使用シチュエーションを理解してもらうことです。
- プログラミング
- インフラエンジニア
- git