ここでは、Pythonで文字列の中に別の変数を出力する際によくみる次の4つについて解説します。
- print関数・print文
- formatメソッド
- f文字列
- printf形式
それぞれ文字列変数を扱う上で、重要な知識です。
なお文字列変数の出力に関しては、Python2とPython3で大きく異なっています。そこで、文中では両者の違いもお伝えしながら解説を進めたいと思います。
ちなみに、もしプログラミングが初めてで「変数って何?」という場合は、「Pythonの変数の定義(変数宣言)の方法と命名規則」をご確認ください。
「Pythonの文字列の基本的な操作まとめ」では、Pythonの初学者向けに、文字列についての基本的な知識と操作方法を解説しています。まだ目を通していない場合は、ぜひご覧頂ければと思います。
1. 文字列変数のprint出力
文字列変数を出力するときはprintを使いますが、Python2とPython3では、その扱いが大きく異なっています。具体的には、
- Python3はprint関数
- Python2はprint文(ステートメント)
です。
Python3から学習を始めた方はprint関数を使いましょう。ただし、Python2で書かれたコードも沢山あるのでprint文についても理解はしておきましょう。
1.1. 【Python3】print関数
Python3では、文字列を出力するにはprint()の括弧の中に出力したい文字列を書きます。
string_a = "This is a text"
string_b = "これはテキストです。"
print(string_a) # string_aを出力。
print(string_b) # string_bを出力。
print("これは'テキスト'です。") # 出力する文字列を直接入力。
1.2. 【Python2】print文
Python2ではprint文を使います。文字列を出力する時に括弧は不要です。次のように書きます。
string_a = "This is a text"
string_b = "これはテキストです。"
print string_a # string_aを出力。
print string_b # string_bを出力。
print "これは'テキスト'です。" # 出力する文字列を直接入力。
Python2でもfutureモジュールを読み込めば、print関数を使えるようになりまあす(モジュールについては、「Pythonのモジュールとは」をご覧ください。)。
# Python3のprint関数をPython2で使う方法
from __future__ import print_function
print(string_a)
ただし、futureモジュールを読み込むと、それ以降print文を使用することはできなくなります。
2. 【Python3】formatメソッドによる文字列への変数展開
Python3から、文字列オブジェクトにformatメソッドが追加されました(後に Python 2.6 以降にも逆移植)。「メソッド」とは、オブジェクトに対して使える便利なツールのことです(「Pythonのオブジェクトとは」をご覧ください)。
Python2では、formatメソッドと同じような処理を「printf形式」というもので行なっていたのですが、現在では、
- 表記がシンプルで覚えるのが楽。
- 処理の負荷が少ない。
という理由でformatメソッドが主流です。そこで先にformatメソッドを使った文字列変数の展開方法から解説します。
2.1. 基本|文字列への変数展開
まずはformatメソッドを使った基本的な文字列変数の展開方法を見ていきましょう。
#置換フィールド{}に入れる文字列をformat()で指定します。
text = "チューリップには{}と{}と{}があります。"
print(text.format("赤", "青", "黄"))
まず、文字列変数textには、「チューリップには{}と{}と{}があります。」という文字列を代入しています。この中に {} が 3 つありますね。この {} を「置換フィールド」といいます。formatメソッドによって、この置換フィールドに入れる文字列を自由に設定することができます。
引数に書くのは、文字列ではなく変数でも構いません。次の例をご覧ください。
#format () に入れる引数は変数でも構いません。
text_a = "チューリップには{}と{}と{}があります。"
word_a = "赤"
word_b = "青"
word_c = "黄"
text_b = text_a.format(word_a, word_b, word_c)
print(text_b)
こちらの方がよく使うと思います。
なお「Pythonの数値と文字列を相互に変換する方法」で解説しているのですが、通常、文字列と数値を連結するとタイプエラーというエラーが起きます。
format() メソッドを使うと、この問題に悩まされることなく、数値を、文字列の中に埋め込むことができます。
以下をご覧ください。
name = "山田"
age = 30
point = 100.25
text = "{}選手、年齢{}才の得点は{}点でした。"
result = text.format(name, age, point)
print(result)
文字列の中に数値を埋め込んでも、エラーにはなっていませんね。
2.2. 引数番号を指定して展開
format()メソッドの書き方は様々です。次のような書き方もあります。置換フィールドに{0}、{1}、{2}のように引数番号を指定して、対応する引数を設定する方法です。
name = "山田"
age = 30
point = 100.25
text = "得点:{2}、名前:{0}、年齢:{1}才"
result = text.format(name, age, point)
print(result)
format()メソッドには、「text.format(name, age, point)」 の順番で記入しています。しかし、出力したものを見てみると point, name, ageの順に埋め込まれていますね。
これは下図のように、変数nameは引数番号0、変数ageは引数番号1、変数pointは引数番号2に対応しているからです。
引数の番号は 1 からではなく、0 から始まるので、0 = name, 1 = age, point =2 です。
2.3. 変数を指定して展開
引数は番号ではなく変数で指定することもできます。
次の例をご覧ください。
text = "{name}選手、年齢{age}才の得点は{point}点でした。"
result = text.format(name="山田", age=30, point=100.25)
print(result)
文字列の中の置換フィールド {} にあらかじめ、name, age, point というように変数を入力しています。そして、format()メソッドの中で、「name = “山田”」というように、それぞれの変数(キーワード)に文字列や数値を代入しています。
この書式を使うと、{name}, {age}, {point} のように、それぞれの引数が何を表しているのかが一目で分かるようになり便利です。
formatメソッドについては、以下のページでさらに詳しく操作方法をまとめていますので確認しておきましょう。
3. 【Python3】f文字列による文字列への変数展開
上で説明した、キーワード引数を使って、文字列変数を埋め込む方法ですが、Python 3.6 以降は、「f文字列」というものが追加されて、より使いやすくなりました。
これは、formatメソッドと比べて、
- さらに簡潔なコードを書くことができる。
- さらに負荷が少ない。
というメリットがあり、より「Pythonらしい」書き方です。以下をご覧ください。
name = "山田"
age = 30
point = 100.25
text = f"{name}選手、年齢{age}才の得点は{point}点でした。"
print(text)
使い方はformatメソッドと似ています。これについても「Pythonのformatメソッドの使い方」の最後で様々な書き方を解説しているのでご確認ください。
4. 【Python2】printf形式による文字列への変数展開
Python 2 では、文字列変数の中に、任意の要素を埋め込む時には、「%演算子」を使っていました(実はPython 3 以降でも使えます)。埋め込む要素の型によって、「%」の後ろに入力する文字は、以下のように使い分ける必要がありました。
- %s:文字列を埋め込む
- %d:整数を埋め込む
- %f:浮動小数点数を埋め込む
この方法は、コードの見た目もスッキリしないですし、処理速度も遅いなどのデメリットがあるので、今は、formatメソッドとf文字列の書き方を覚えましょう。
しかし、Python 2 のコードを目にする機会もあると思いますので、念のため解説しておきます。
まず、変数が 1 つの場合を見てみましょう。
string = "hello world"
text = "my first string is %s" %string
print text
print 文に直接、「%」演算子を書くこともできます。
#print文に直接書くこともできます。
string = "hello world"
print "my first string is %s" %string
2 つ以上の変数を埋め込む時は次の通りです。
name = "山田"
score = 98.24
rank = 2
result = "%s選手は、%f点で、総合%d位でした。" %(name, score, rank)
print result
文字列は「s」、整数は「d」、浮動小数点数は「f」ですね。
#print文に直接書くこともできます。
name = "山田"
score = 98.24
rank = 2
print = "%s選手は、%f点で、総合%d位でした。" %(name, score, rank)
いかがでしょうか。format() メソッドを見た後だと、使いづらく感じると思います。
5. まとめ
最後に、Pythonにおける文字列変数の扱いのポイントをまとめておきます。
- Python3はprint関数。
- Python2はprint文(ステートメント)。
- Python2でprint関数を使いたい場合はfutureモジュールをインポート。
- Python 3からformatメソッドが実装、後にPython2.6以降でも使えるように。
- 「%記法」よりもformatメソッドの方が使いやすさ、速度の点で優れている。
- Python3.6以降は「f文字列」が実装され、さらに便利になった。
- %記法はPython2で使われている。
ぜひ、覚えておいてくださいね。
コメント