[解決!Python]f文字列の置換フィールドをネストさせて、整数や浮動小数点数の書式化方法を動的に切り替えるには解決!Python

f文字列の置換フィールドの内部にはさらに置換フィールドを記述できる。これを使って、複数の値を1つの置換フィールドに埋め込める。その使用例を紹介。

» 2022年05月24日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

# 浮動小数点数の精度を変更する
n = 123.4567

result = f'{n:.5f}'
print(result)  # 123.45670

precision = 5
result = f'{n:.{precision}f}' 
print(result)  # 123.45670

for precision in range(5):
    result = f'{n:.{precision}f}'
    print(result)
# 出力結果:
#123
#123.5
#123.46
#123.457
#123.4567

# 2進/10進/16進の切り替え
n = 2050

for flg in ['b', 'd', 'x']:
    tmp = "_b" if flg == "b" else "#08x" if flg == "x" else "+08d"
    result = f'{n:{tmp}}'
    print(result)
# 出力結果:
#1000_0000_0010
#+0002050
#0x000802

f文字列の置換フィールドをネストさせる

 Pythonのf文字列では置換フィールド内に置換フィールドをネストさせて記述できる。例えば、以下のようなコードについて考える。

n = 123.4567

result = f'{n:.5f}'
print(result)  # 123.45670

 この例では置換フィールド(波かっこ「{}」で囲まれた部分)に変数nの値を小数点以下5桁の値として埋め込んでいる。何らかの理由で、小数点以下の有効桁数をコードの実行時に動的に変更したくなったとしよう。この値を変数precisionに格納するとする。すると、これを実現するコードは次のようになる。

precision = 5
result = f'{n:.{precision}f}' 
print(result)  # 123.45670

 ここでは、変数nと変数precisionという2つの値を1つの置換フィールドに埋め込む必要があるので、置換フィールドをネストさせている。単一のf文字列で別々の部分に置換フィールドを置いて、それらに変数や式の値を埋め込むのであれば、このようにネストさせる必要はない。

 置換フィールドをネストさせることで、複数の変数や式の値をf文字列に埋め込める。以下は小数点以下の有効桁数を増やしながら、変数nの値を出力する例だ。

for precision in range(5):
    result = f'{n:.{precision}f}'
    print(result)
# 出力結果:
#123
#123.5
#123.46
#123.457
#123.4567

 小数点以下の有効桁数が切り替わっていることに注目されたい。

 もう1つ例を示す。これは整数値を2進/10進/16進のいずれかで表示するものだ。それぞれの形式で出力する際には、2進なら4桁ごとにアンダースコアが表示されるようにするなど、追加のフォーマットも指定している。

 1つのf文字列でこれら全てを記述してもよいのだが、ここでは書式指定を独立した変数tmpに代入した後に、それを最終的なf文字列に埋め込むようにしている。

n = 2050

for flg in ['b', 'd', 'x']:
    tmp = "_b" if flg == "b" else "#08x" if flg == "x" else "+08d"
    result = f'{n:{tmp}}'
    print(result)
# 出力結果:
#1000_0000_0010
#+0002050
#0x000802

 ループ変数flgの値によって、出力形式が切り替わっている点に注目されたい。

 ユーザーに出力形式を選択してもらうような処理を行う際には、置換フィールドのネストがうまく使えるだろう。

「解決!Python」のインデックス

解決!Python

鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬯ョ�ヲ�ス�ョ髯キ�サ�ス�サ�ス�ス�ス�ソ�ス�ス�ス�ス鬯ッ�ッ�ス�ィ�ス�ス�ス�セ�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ髣費ソス�ス�・�ス�ス�ス�ウ�ス�ス�ス�ィ�ス�ス�ス�ス髯懶ス」�ス�、�ス�ス�ス�ク�ス�ス�ス�イ鬯ゥ蠅捺��ス�ソ�ス�ス�ス縺、ツ€�ス�ス�ス�ス�ス�ス�ス�」鬯ッ�ョ�ス�エ鬯ゥ蟶壽桶�ス�ュ鬮ョ�」�ス�ソ�ス�ス�ス�ス�ス�ィ鬮ッ蛹コ�サ繧托スス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬮」蛹�スス�オ髫エ謫セ�ス�エ�ス�ス隶難ス」�守「托スュ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�ゥ鬯ゥ蟷「�ス�「髫エ雜」�ス�「�ス�ス�ス�ス�ス�ス�ス�シ鬯ゥ蟷「�ス�「髫エ荳サ�ス隶捺サゑスソ�ス邵コ�、�つ€鬯ッ�ョ�ス�ヲ�ス�ス�ス�ェ鬩包スカ闔ィ�ス�ス�ヲ�ス�エ�ス縺、ツ€髯キ闌ィ�ス�キ�ス�ス�ス�ス�ス�ス�ス�サ鬯ッ�ッ�ス�ェ�ス�ス�ス�ュ�ス�ス�ス�ス�ス�ス�ス�イ鬯ゥ謳セ�ス�オ�ス�ス�ス�コ鬮ッ�キ�ス�キ�ス�ス�ス�カ�ス�ス�ス�ス�ス�ス�ス�ス New

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

Deep Insider 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー

髫エ蟷「�ス�ャ髫エ魃会スス�・髫エ蟶キ�」�ッ闖ォ�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。