web-dev-qa-db-ja.com

条件に応じたフォーマットでf-stringを使用する

ロジックでf文字列を使用してintfloatとしてフォーマットするにはどうすればよいですか? pplTrueである場合、numを小数点以下2桁にフォーマットし、pplFalseである場合、それを何にでもフォーマットしますそうです。

何かのようなもの string = f'i am {num:.2f if ppl else num}'しかし、これは機能しません。以下のコードは、可能であれば、より簡単なf文字列で実現したい動作を示しています。

ppl = True
num = 3
string = f'I am {num:.2f}' if ppl else f'I am {num}'
print(string)
#if ppl False
#=> i am 3
#if ppl True
#=> i am 3.00
15
jacobcan118

式をネストして、f文字列の内部式を評価できます。これは、f-string内で三項を右に移動できることを意味します。

string = f'I am {num:{".2f" if ppl else ""}}'

ネストに必要な追加のブレースのペアに注意してください。

しかし、これはcleanerだとは思わない。個人的には、元の明確なバージョンとは対照的に、ここで何が行われているのかを解析するのが難しいと感じています。結局のところ、単純な方が複雑よりも優れています。ネストよりもフラットの方が優れています。

22
Andras Deak

実際にfstringを2行に分けることをお勧めします

num_str = f'{num:.2f}' if ppl else f'{num}'
str = f'I am {num_str}'

そうすれば、各行ができる限りシンプルになります。

2
Gamrix