Pythonの文字列フォーマット|f文字列やformat関数等での使い方

スポンサーリンク

文字列フォーマットとは、その名の通り、Pythonで文字列をフォーマットするための複数の方法を指します。

この記事では、さまざまな方法とその使用方法について説明します。

スポンサーリンク

文字列の書式設定とは?

ある数値の2乗を表示するプログラムを書いているとします。

入力では、ユーザーから整数を受け取り、出力では、その整数の2乗がそうであることをユーザーに伝えることになります。

例えば、入力が12なら、「12の2乗は144」と出力する必要があります。

文字列に挿入する整数が2つあるため、このように完全な文字列を書くことはできませんので、この文字列を生成する方法が必要になります。

文字列の書式設定を使えば、それが可能になります。

注意:print("The square of", input, "is", result) とすると、4つの異なるものを表示することになり、フォーマットされた文字列は生成されないので、これは文字列フォーマットとは言えません。

String Formatting Techniques の種類

今日は、文字列の書式設定の3つの方法について説明します。

  1. 演算子 % の使用
  2. f-文字列の使用
  3. format() メソッドの使用

それぞれのメソッドについて、一つずつ説明していきましょう。

1. %` 演算子を使った文字列の書式設定

これは文字列をフォーマットする古い方法ですが、今でも簡単な操作には役に立ちます。

これは、C言語の printf ステートメントと非常によく似た動作をします。

例を見てみましょう。

num = 12
result = num * num
str = "The square of %d is %d" % (num, result)
print(str)

出力は

The square of 12 is 144

numresultという 2 つの整数があります。

二重引用符の中には、出力される文字列全体を記述していますが、整数の代わりに%d` と記述しています。

これはPythonに、ここに整数が代入されることを知らせます。

文字列の後に % 演算子を使い、2 番目のオペランドとして、正しい順序で代入される整数のリストを含むタプルを記述しています。

上の例では、置換される整数が2つあるので、2つの整数をタプルとして記述し、それを2番目のオペランドに指定しています。

文字列の中に %d と書かれていることに注意してください。

% の後に続くものは書式指定子と呼ばれます。

この例では、 d は整数、 s は文字列、 f は浮動小数点数または10進数などの書式を指定するものです。

指定子の全リストを見るには、Pythonのドキュメントを参照してください。

文字列の書式設定に % を使用する際の注意点

  1. Pythonは整数の左詰めを行い、整数が受け取る文字数の合計が指定した数字と同じになるようにします。5d`の場合、”123 “は” 123″、”12 “は” 12″といった具合に代入されます。
  2. 上記の数値は、左側に0を付けて指定することもできます(例:%05d)。Pythonは整数に同様の左詰めをしてくれますが、スペースの代わりに0を付けてくれます。例えば、%05dの場合、”123 “は “00123”、”12 “は “00012 “などと代入される。
  3. 上記の数値は、左側に「-」記号を付けて指定することもできます(%-5d)。この場合、Pythonは左側のパディングを提供する代わりに、右側のパディングを提供します。つまり、%-5d の場合、”123″ は “123 ” として、”12″ は “12 ” として代入されます。

これらの点は、表を作成するときに便利です。

2. f-stringを使った書式設定

これは、最も理解しやすく、最も広く使われている書式設定方法です。

例を挙げて説明します。

num = 12
result = num * num
str = f"The square of {num} is {result}"
print(str)

結果を出力すると、以下の様になります。

The square of 12 is 144

見ての通り、文字列の中に直接式を埋め込んでいます。

文字列の先頭には “f “が付いていて、これはpythonにf-stringであることを示し、{}の中に書かれた式が評価されてその位置の文字列に埋め込まれることを意味します。

中括弧の中の式は単一の変数である必要はなく、むしろ値を返すどんな文でもかまいません。

算術計算でも、関数呼び出しでも、条件演算でもかまいません。

例を見てみましょう。

a = 1
b = 2
str = f"Expression: {a + b}"
print(str)

出力。

出力:

Expression: 3

上の例では、f-stringの内部で数学的な演算を行っている。

このように、f-stringは強力なオプションであることがわかる。

もう一つの例を見てみましょう。

a = 1
b = 2
str = f"a is '{a:5}' and b is '{b:05}'"
print(str)

出力。

a is '    1' and b is '00002'

上の例のように、%演算子と同様に、パディングを指定することもできます。

3. .format()` メソッドによる文字列の書式設定

このメソッドはf-stringと非常によく似ているので、例を使って見てみましょう。

num = 12
result = num * num
str = "The square of {} is {}".format(num, result)
print(str)

結果は以下の通りです。

The square of 12 is 144

見ての通り、文字列の内部では {} を使って2つのプレースホルダーを指定し、文字列に対して format メソッドを使用して、正しい順序で置換されるように適切な整数を渡しています。

中括弧の中には識別子を入れることができますが、識別子の値は後で送る必要があります。

先ほどと同じように、左詰めを指定することもできます。

次の例を見てみましょう。

a = 1
b = 2
str = "a is '{first}' and b is '{second:03}'".format(first=a, second=b)
print(str)

結果は以下の通りです。

a is '1' and b is '002'

上の例では、プレースホルダーの中に名前を入れ、 format メソッドの引数リストで、各プレースホルダーの値をその名前を使って指定しています。

2つ目のプレースホルダーは、他の手法と同様に左のパディングをゼロにして指定しています。

まとめ

この記事では、文字列のフォーマットについて勉強し、それを行うための3つの一般的な方法について説明しました。

最初に % 演算子を学び、次に f-string と format メソッドを学びました。

また、フォーマットされた文字列にパディングを追加する方法についても説明し、その出力を見てコードの勉強をしました。

楽しく勉強できたでしょうか。

また、次のチュートリアルでお会いしましょう。

タイトルとURLをコピーしました