はじめに
今回はf-stringsを扱います。f-stringsはPython3.6から導入された、文字列中に変数を展開したりコードを実行したりできる機能です。文字列のformatメソッドよりも短い記述で読みやすい場合もあります。是非身につけておきましょう。
文字列について
format()メソッド
まず、はじめにformat()メソッドを確認しておきましょう。
animal='らくだ' age=6 print('{}の年齢は{}歳です。'.format(animal,age))
このように文字列中で読み込みたい変数があるときに、{}と記述しておいて、あとで、.formatにあとに、読み込みたい変数を指定します。ここでは、animalとageが文字列中に差し込まれています。{}の中に何も記述しなければ、.formatのあとに指定した変数は、この順番で差し込まれます。変数が多い場合は、次のように差し込む位置に名前を付けてあげるとわかりやすいです。
print('{x}の年齢は{y}歳です。'.format(x=animal,y=age))
これでも同じ結果が得られます。.format()メソッドではこのような変数の差し込み以外にも桁区切り、小数点位置の指定、%表示、0パディングなどをすることもできますが、今回は割愛します。
f-strings
ここからはf-strigsについて説明していきます。まず、今回扱う内容を列挙しておきます。
- 変数の値を挿入する
- 文字列の中で計算する
- 関数の実行をする
- キャストする
- フォーマット指定する
これらを一つずつ見ていくことにしましょう。
変数の値を差し込む
変数の差し込みは次のようにします。
print(f'{animal}の年齢は{age}です。')
このように{}を使うのですが、{}の中に直接変数を指定することができます。そのため差し込みが増えても、みやすいコードとなります。
文字列の中で計算する
f-stringsでは{}の中で計算することもできます。
print(f'{animal}は来年{age+1}歳になります。')
このように変数ageに1を加える計算ができてますね。計算というにはあまりに簡単な例ですが・・・
関数の実行をする
次に関数の実行です。ここでは簡単な関数を定義しておきます。
animals=['らくだ','ねこ','きりん','ぞう'] def count_animal(animals): return len(animals)
リストを指定して、リストの中の要素を返す関数です。これを使ってみましょう。
print(f'動物は全部で{count_animal(animals)}匹います。')
うまくいっていますね。
キャストする
print(f'年齢をfloat型で表示すると、{float(age)}となります。')
フォーマットを指定する
最後にフォーマットの指定について説明します。ここでは、format()メソッドのところでは割愛した、桁区切り、小数点位置の指定、%表示、0パディングを扱うことにしましょう。
まず、桁区切りを見てみましょう。
number=123456789 print(f'{number:,}')
変数の後に「:,」を記述するだけで3桁ずつに桁区切りをしてくれます。
次に小数点位置の指定を見てみましょう。
mean_age=6.892
print(f'{mean_age:.2}')
このようにフォーマットの指定は、「変数:」のあとに「,」や「.2」などの指定をすることで簡単にできます。
次に%表示です。
rate=0.64 print(f'{rate:%}')
同じように「変数:%」とすることで%表示にすることができました。でも、小数点以下の桁数が多すぎますね。これは次のようにすることで指定できます。
print(f'{rate:.1%}')
最後にパディングを確認しておきましょう。
n=32 print(f'{n:08}')
これは「n」という変数に格納されている数を呼び出して8桁で表示する、桁数の調整は「0」で埋めておこなう、という意味になります。0で埋めるときに「左側を埋める」場合、「右側を埋める場合」「元の数字を中央にして左右で埋める場合」を指定することができます。
# 左側を埋める print('左側を埋める例です') print(f'{n:0>8}') print() # 右側を埋める print('右側を埋める例です') print(f'{n:0<8}') print() # 左右を埋める print('左右を埋める例です') print(f'{n:0^8}')
このように左側を埋める場合は「>」、右側を埋める場合は「<」、左右を埋める倍は「^」を指定します。この形式であると、埋める文字列は(数字だけでなく)記号を指定することもできます。 mark='*' # *でパディングする print(f'{n:{mark}>8}')
まとめ
いかがでしたか?今回はf-stringsを扱いました。このやり方は非常に洗練されていて扱いやすいですね。直観的なので書きやすいですし、視認性も抜群ですね。是非身につけておきましょう。
コメント