素晴らしいPythonf-strings
Pythonf-stringの全機能をマスターする方法を学ぶ
Pythonf-stringsの素晴らしいパワー
フォーマットされた文字列リテラル( f文字列とも呼ばれます)はPython 3.6から存在しているので、これまでに聞いたことがあると思いますが、その能力の全容を認識していない可能性があります。
テキストと数値のフォーマット
F文字列はPythonのフォーマット仕様Mini-Languageをサポートしているため、多くのフォーマット操作を修飾子に埋め込むことができます。これにより、テキストの整列または中央揃え、先行ゼロ/スペースの追加、数千の区切り文字の設定などが可能になります。次にいくつかの例を示します。
円周率=3.1415926
print(f'Piは{pi:.2f}'とほぼ同じです)
$Piは約3.14に等しい
id = 1
print(f "IDは{id:03d}")
$IDは001です
N = 1000000000
print(f'彼の純資産は${N:、d}')
$彼の純資産は$1,000,000,000です
text = "hello world"
# Center text:
print(f"{text:^15}")
$ ' hello world '
number = 1234567890
# Set separator
print(f"{number:,}")
$ 1,234,567,890
number = 123
# Add leading zeros
print(f"{number:08}")
$ 00000123
ネストされたF文字列
基本的なf文字列がフォーマットのニーズに十分でない場合は、それらを相互にネストすることもできます。たとえば、floatをフォーマットして、文字列を右揃えにすることができます。
number = 254.3463
print(f"{f'${number:.3f}':>10s}")
$ ' $254.346'
日付と時刻のフォーマット
f文字列を使用して数値の書式設定を適用することはかなり一般的ですが、日付とタイムスタンプの文字列も書式設定できることをご存知ですか?
f-stringは、datetime.strftimeメソッドを使用したかのように日付と時刻をフォーマットできます。ドキュメントに記載されているいくつかのフォーマットよりも多くのフォーマットがあることに気付いた場合、これは非常に便利です。 Pythonのstrftimeは、基盤となるC実装でサポートされているすべての形式もサポートしています。これはプラットフォームによって異なる可能性があるため、ドキュメントには記載されていません。そうは言っても、とにかくこれらの形式を利用して、たとえば、%Y-%m-%dに相当する%Fまたは%H:%M:%Sに相当する%Tを使用できます。言及されているのは%xと%Xで、それぞれロケールで推奨される日付と時刻の形式です。これらの形式の使用は、明らかにf文字列に限定されません。フォーマットの完全なリストについては、 Linuxのマンページを参照してください。
from datetime import datetime
today = datetime.today()
print(f"{today:%Y-%m-%d}")
$ 2022-03-11
print(f"{today:%Y}")
$ 2022
print(f"Today is {today}")
$ Today is 2021-07-31 18:20:48.956829
print(f"Today is {today:%B %d, %Y}")
$ Today is July 31, 2021
print(f"Today is {today:%m-%d-%Y}")
$ Today is 07-31-2021
適切な脱出
もちろん、いくつかの文字を処理するときに特別な注意が必要な状況がいくつかあります。次にいくつかの例を示します。
name = "Paul"
print(f'My name is \'{name}\'.')
$ My name is 'Paul'.
print(f'My name is {{name}}.')
$ My name is {name}.
print(f'My name is {{{name}}}.')
$ My name is {Paul}.
print(f'My name is \\{name}\\.')
$ My name is \Paul\.
結論
%などの従来のCスタイルのフォーマットやformat()メソッドよりも読みやすいことに加えて、f文字列も最適化されており、処理がはるかに高速です...したがって、これは間違いなく優れたソリューションです。