Pythonでprint文による出力をする際、もっと簡単に分かりやすくしたい。
そう思うことはありませんか?
特に、print文に文字列と変数を混在する際に混乱する場合が多いと思います。
この記事では、小難しい理屈を抜きにformatメソッドとf文字列の基本的な使い方をご紹介します。
そのうえで、それぞれの特徴とおススメの使い方もご紹介しています。
この二つを使いこなすことで、文字の表示(出力)が断然分かりやすく処理できるようになりますので、ぜひマスターしましょう!
なお、本記事内では「位置引数」と「キーワード引数」が出てきます。
もしも分からないという場合は、こちらの記事をご覧ください。
format関数とformatメソッドの基本
format関数 / formatメソッドを使うと、表示形式を指定して出力することができます。
*以下①と②は format関数 を使っており、③は formatメソッド を使っています。
両者の違いを分からなくても問題はありませんが、一応補足しておきます。
また、今回の記事のメインは③なので、記事のタイトルは formatメソッド と記載しています。
良くあるパターンとして、以下の3つをご紹介します。
他にも知りたいという方は、pythonの公式ドキュメントを参照してみてください。
①小数点以下の表示桁数を指定する
print文で「1÷3」を出力すると、
print(1/3)
答えは「0.3333333333333333」になりますね。
0.3333333333333333
このように計算結果が小数点になる場合、format関数 を使うことで「小数点以下の表示桁数を指定」することができます。
例えば、小数点第2位まで表示する場合。
print(format(1/3,'.2f'))
答えは「0.33」になります。
0.33
少し解説をすると、format関数 は第一引数に値を、第二引数に表示形式を指定します。
引数の仕切りには「,(カンマ)」を付けます。
format(第一引数, 第二引数)
「.2」は小数点以下第2位までを指定するという意味で、後ろの「f」は小数点以下の表示桁数を固定するという意味です。
この時につける「f」の意味は「fixed-point notation(固定小数点数表記)」です。
後述するf文字列とは関係ありません。
これを合わせて「.2f」とし、その前後を「’(シングルクォーテーション)」で囲って第二引数にしています。
②3桁区切りを入れる
print文で4桁以上の数字を出力する際、通常はカンマなどは付きません。
print(1234567890)
表示結果は「1234567890」となります。
1234567890
このような場合も、format関数 で「千の位ごとにカンマ」を入れることができます。
print(format(1234567890,','))
結果は「1,234,567,890」になります。
1,234,567,890
先ほどの①とは違い、第二引数に「’(シングルクォーテーション)」で囲んだ区切り文字(今回は「,(カンマ)」)を指定することで、3桁ごとに「,(カンマ)」で区切って表示されます。
なお、「’_’」のようにアンダースコアを入れると、結果は「1_234_567_890」と表示されます。
(あまり使うことはないでしょうけど。)
③文字列に複数の値を埋め込む
ちょっと何言ってるのか分からない??という方も多いかもしれません。
formatメソッド を使うことで、「print文で出力する際に変数の値を順番に入れながら出力する」ということができるのです。
まずは、基本形をご紹介します。
初めに変数を定義し、適当な値を入れます。
name = 'papa3'
age = 40
続いて、変数の値を formatメソッド の中に入れてみましょう。
print('{} は {} 歳です'.format(name, age))
実行すると、「papa3 は 40歳 です」と出力されます。
papa3 は 40歳 です
ここで実行したことは、以下の様に記述することと「ほぼ」同じ結果になります。
*「ほぼ」の意味は、スペースが入るか入らないかの違いです。
print(name + 'は' + str(age) + '歳です')
実行結果は、
papa3は40歳です
これなら、わざわざ formatメソッド などと面倒なことをしなくてもいいんじゃない?
と思われたかもしれません。
違いを確認するため、並べてみましょう。
print(name + 'は' + str(age) + '歳です')
print('{} は {} 歳です'.format(name, age))
簡単に理屈を説明します。
上記の例では、「{ }」が2つ登場します。
このとき、.format() 内に指定した引数が順番に入ることになります。
*このように「順番」に引数を指定することを「位置引数」と言います
一つ目には 変数name、二つ目には 変数age が入るので、「name は age歳 です」=「papa3 は 40歳 です」と表示されるのです。
なお、上の例では print文 内に直接テキストを入れていましたが、基本の文章を変数に入れ、変数名に対して formatメソッド を使うこともできます。(下図)
name = 'papa3'
age = 40
text_template = '{} は {} 歳です'
print(text_template.format(name, age))
この方が分かりやすいですね。
formatメソッドの使い方:応用
さて、基本形を理解したところで、もう少し踏み込んだ使い方を二つご紹介します。
①値の位置を指定する
先ほどの基本形では、{ } に渡される値は formatメソッド 内の引数の順番でした。
このとき、{ } 内に「{ 0 } { 1 } … 」のように番号を付けることで、formatメソッド 内の順番を指定することができます。
print('{1} は {0} 歳です'.format(age, name))
先ほどの基本形との違いは分かりますね。
{ 0 } には formatメソッド の第一引数である age が入り、
{ 1 } には formatメソッド の第二引数である name の値が入ります。
*位置引数の番号はリストやタプルと同じように、値は0から始まります
②キーワード引数で指定する
続いては、キーワード引数を名前で指定する方法です。
要は変数の様に名前を付けて指定する方法です。
name = 'papa3'
age = 40
print('{n} は {a} 歳です'.format(n=name, a=age))
このように、{ } 内に指定したキーワードに対し、formatメソッド 内の引数で指定した キーワード引数 の値が入ります。
もちろん、下図のように直接値を入れることもできます。
(スマートなやり方ではありませんが、説明としてみてください。)
print('{n} は {a} 歳です'.format(n='papa3', a=40))
formatメソッド による文字列の埋め込みについては以上です。
f文字列の基本
formatメソッド よりも、もう少し簡単に値を埋め込む方法が次のご紹介する「f文字列」です。
なお、f文字列(正式には「フォーマット済み文字列リテラル」といいます)は、python3.6以降で利用できるようになりました。
*formatメソッド はpython2.6から使えます
使い方は簡単です。
上記③(formatメソッド)と同じ例で記述してみましょう。
name = 'papa3'
age = 40
print(f'{name} は {age} 歳です')
fの後ろに’(シングルクォーテーション)で囲んだ中に式や変数を入れます。
後ほど紹介しますが、:(コロン)を付けることで書式設定もできます。
書式設定については上記の format関数 説明①と共通です
f文字列を使うと、書式設定もできます。
例えば、このような使い方です。
print(f'{1/3:.2f}')
計算結果は「0.33」となります。
0.33
コロンを付けると、書式を指定することができるので、format関数 の説明①と同じように「.2f」とすれば小数点以下第2位まで表示することができます。
桁区切りをつける場合も同じように、
print(f'{1234567890:,}')
とすれば、
1,234,567,890
と出力されます。
format関数 との違いは、「,(カンマ)」を「’(シングルクォーテーション)」で囲む必要がなく、そのまま記述できることです。
それぞれの特徴
formatメソッド は、記述が長くなるため、見づらさ・分かりづらさを感じることがあります。
できることが多いので「自由度が高い」とも言われますが、見方を変えると複雑になりがちとも言えます。
一方、f文字列 は直接式や変数名を入れることができるので、見やすく、簡単に記述できます。
今回は紹介していませんが、数式を入れて計算結果に対して書式設定もできるというのは便利です。
どのように使い分ける?
結局のところ、見やすさ・使いやすさは個人の好みにもよると思います。
どちらも書式指定ができますしね。
古いバージョンのPythonでも動くということでは formatメソッド が良いと思いますが、3.6以降であれば f文字列 の方が良いのではないでしょうか。
良く使うパターンとしては、変数名を入れて値を呼び出すことがあるので、個人的には f文字列 の方が使いやすいと思います。
もう少し詳しく説明してくださっているこちらのサイトも参考になります。
まとめ
formatメソッドとf文字列の記述方法としました。
もう少し詳しく知りたい、というご意見がありましたら、追加で記事を作成します。
それでは、ステキなPythonライフを!