【Python】f-string(f文字列)の使い方まとめ。format関数との違いや書式の指定方法を実例で解説

python-how-to-use-f-string Python
記事内に広告が含まれていることがあります。

format関数の簡易的な記述方法である、f-string(f文字列)の使い方について、format関数との違いなどポイントを実例を用いて解説しています。

f-string(f文字列)とは何か?

f-string(f文字列)とは、format関数をより簡易的にした記述方法です。

適用されたのは、python3.6(2016年12月にリリース)からなので、比較的新しく導入された機能になります。

公式ページでは「フォーマット済み文字列リテラル」と呼ばれています。

(参考)Python公式 フォーマット済み文字列リテラル

f-strignとformat関数との特徴と違い

f-strignとformat関数の主な特徴と違いは以下になります。

・f-stringの方が記述がシンプル。
・format関数の方が自由度が高い。(パターンが多く複雑ともいえます)

▼f-stringの特徴

・コードが簡易的
・すべて変数で指定する
・変数と書式をセットで記述する
 → どの変数にどんな書式が与えられているかがわかりやすいです。

▼format関数の特徴

・代入する値に数値や文字列を直接指定できる
・{}の中を空欄でも指定できる(自動でインデックス番号が割り振られる)
・どの引数を使うかをインデックス番号で指定できる

f-stringの基本構文

f'{値:書式}'

変数を使う場合は以下のようになります。

変数名 = 値 
f'{変数名:書式}'
  • 「f」:冒頭に記述。大文字でも問題ありません。
  • 「’ ‘」:文章を記述。「”」や「”’」でも問題ありません。
  • 「{ }」:代入する変数と書式を記述
  • 「変数名」:代入する変数(任意です)

f’ ‘ を使う以外はformat関数と同じ記述になります。
format関数で使われるダブルコロン「:」以下の書式設定を省略した記述です。

f-stringの使い方実例

f-stringの使い方の実例は以下になります。

f-string

a='AAA'
b=111
c='BBB'

f'私の名前は{a}です。身長は{b}cmです。好きな食べ物は{c}'

#出力
# '私の名前はAAAです。身長は111cmです。好きな食べ物はBBB'

format関数の使い方実例(比較用)

対比用として同じ出力結果をformat関数で作成する場合のコードは以下になります。

format関数

format関数を使う場合は、指定できるパターンが複数存在します。

(1) 引数に直接値を渡す


.format(‘AAA’, 111, ‘BBB’)

'私の名前は{}です。身長は{}cmです。好きな食べ物は{}'.format('AAA', 111, 'BBB')

#出力
# '私の名前はAAAです。身長は111cmです。好きな食べ物はBBB'

formatの( )に記載された順番に、{ }の中に適用されていきます。
{ }の数が、formatで指定した要素より多い場合はエラーになります。

(2) 引数に変数を渡す


.format(a, b, c)

a='AAA'
b=111
c='BBB'
'私の名前は{}です。身長は{}cmです。好きな食べ物は{}'.format(a, b, c)

#出力
# '私の名前はAAAです。身長は111cmです。好きな食べ物はBBB'

(3) 引数の番号で指定する


.format(c, b, a)

a='AAA'
b=111
c='BBB'

'私の名前は{2}です。身長は{1}cmです。好きな食べ物は{0}'.format(c, b, a)

#出力
# '私の名前はAAAです。身長は111cmです。好きな食べ物はBBB'

(4) 引数の中で変数名をつけて指定する

.format(height=’111′, favorit=’BBB’, name=’AAA’)

'私の名前は{name}です。身長は{height}cmです。好きな食べ物は{favorit}'.format(height='111', favorit='BBB', name='AAA')

#出力
# '私の名前はAAAです。身長は111cmです。好きな食べ物はBBB'

このように、format関数は同じ処理をするにも記述方法が複数ありますが、それがよけいにわかりにくくさせている場合があります。

実際、f-stringのシンプルな書き方で十分に対応できます。

f-stringで書式を指定する方法

書式設定の書き方はformat関数と同じです。

f'{A:0<10}'

 └「:」:以下に書式を記述
 └「0」:隙間を埋める文字(任意)
 └「<」:文字の配置(< 左寄せ、> 右寄せ、 ^中央寄せ
 └ 「10」:幅。bite数で指定

以下でそれぞれの設定について解説します。

配置を指定する方法

f'{a:^n}’
 └「:」以降が書式設定
 └「^」中央寄せ(「<」左寄せ、「>」右寄せ)
 └「n」整数。隙間をbite数で指示
  - 隙間の指定がないとテキストの配置は意味ない。右寄せ

a= 'AAA'
f'私の名前は{a:^9}です'

#出力
# '私の名前は   AAA   です'

隙間を埋める方法

0で埋める(0パディング)

f'{a:0>n}’
 └ 要素の配置指定記号(ここでは「>」)の前に0をつける0埋め

a= 'AAA'
f'私の名前は{a:0>9}です'

#出力
# '私の名前は000000AAAです'

任意の文字で埋める

f'{a:Z>n}’
 └ 要素の配置指定記号(ここでは「>」)の前に埋めたい文字を入れる
 └ 記号でも文字でも数値でもOK
 └ 1文字のみ。任意の文字で埋める

a= 'AAA'
f'私の名前は{a:え>9}です'

#出力
# '私の名前はええええええAAAです'

日付の書式を指定する方法

f'{A:%Y年%#m月%#d日}’
└「A」日付データが格納された変数
 └「:」以下に日付の書式を記述
 └「%Y」西暦4桁
 └「%#m」0なしの月(Macの場合は「%-m」)
 └「%#d」0なしの月(Macの場合は「%-d」)

(参考)【Python】datetimeモジュールの指定子まとめ。macとwindowsの指定方法(%Y, %y, %m, %Mなどの違い)

import datetime as dt
past = dt.date(2017,1,3)  #datetime.date(2017, 1, 3)

f'{past:%Y年%#m月%#d日}'

#出力
# f'{past:%Y年%#m月%#d日}'

format関数と違って{変数:書式}のように、変数と書式がセットになっているため、何にどんな書式を設定しているかがわかりやすいです。

なお、format関数ではインデックス番号で指定するため視認性が下がります。

import datetime as dt
past = dt.date(2017,1,3)
now = dt.date(2020,1,28)
future = dt.date(2022,1,30)

"昔は{0:%Y年%#m月%#d日}。今は{1:%Y/%#m/%#d}。未来は{2:%y%m%d}。".format(past, now, future)

千の位にカンマを設定する方法(1,000){:,}

2,123,456,789のように、千の位にカンマを設定することができます。

f'{値:,}’ 
└「:」以下は書式設定
 └「,」千の位にカンマ

x = 123456789
res = f'{x:,}'

print( res )
#出力
# '123,456,789'

%表示にする(数値が100倍される)|{:.n%}

%表示することもできます。1が100%のように、指定した数値が100倍されます。

f'{値:.n%}’ 
└「:」以下は書式設定
 └「.n」小数点以下の桁数(デフォルト6)
 └ 数値は100倍される

res = f'{1:%}'
print( res )

#出力
# 100.000000%
res = f'{1:.0%}'
print( res )

#出力
# '100%'
res = f'{1:.2%}'
print( res )

#出力
# '100.00%'
res = f'{1:.15%}'
print( res )

#出力
# '100.000000000000000%'

数値に+符号をつける|{:+}

数値がプラスのときに+符号をつけることができます。

f'{値:+}’ 
└「:」以下は書式設定
 └「+」プラス/マイナスの符号をつける

x = -500
y = 300
z = 2.56

res = f'1つめ「{x:+}」。2つ目「{y:+}」。3つ目「{z:+}」'
print(res)

#出力
# '1つめ「-500」。2つ目「+300」。3つ目「+2.56」'

小数点の桁数を指定する|{.nf}

小数点以下を何桁まで表示するかを指定することができます。

f'{値:.nf}’ 
└「:」以下は書式設定
 └「.n」小数点の桁数(0からの整数)
 └ デフォルト「:.nf」なしは、入力値分
 └ 四捨五入

x = 1.23
res = f'{x}'
print( res )

#出力
# '1.23'
x = 1.23456789
res = f'{x:.2f}'
print( res )

#出力
# '1.23'
x = 1.23456789
res = f'{x:.0f}'
print( res )

#出力
# '1'
x = 1.23456789
res = f'{x:.12f}'
print( res )


#出力
# '1.234567890000'

指数関数の固定小数点表記にする|{:.ne}

指数関数であるエクスポーネンシャルを使って、特定の桁数までの表示にすることもできます。
数値が大きい場合によく使います。(例:1.23e+08  ← 123456789)  

f'{値:.ne}’ 
└「:」以下は書式設定
 └「.n」点以下で表示する数
 └デフォルト「.n」なしは点以下6桁まで表示

x = 123456789
res = f'{x:.e}'
print( res )

#出力
# '1.234568e+08'
x = 123456789
res = f'{x:.2e}'
print( res )

#出力
# '1.23e+08'
x = 123456789
res = f'{x:.0e}'
print( res )

#出力
# '1e+08'
x = 123.456789
res = f'{x:.0e}'
print( res )

#出力
# '1e+02'


参考リンク

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