私はテンプレート文字列を使用していくつかのファイルを生成していますが、以前のテンプレートコードを次のようなものから減らすために、この目的のための新しいf文字列の簡潔さが気に入っています。
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
これで、変数を直接置き換えて、これを行うことができます。
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
ただし、テンプレートを他の場所(コードの上位)で定義したり、ファイルなどからインポートしたりすることが理にかなっている場合があります。これは、テンプレートがフォーマットタグを含む静的な文字列であることを意味します。文字列を新しいf文字列として解釈するようにインタプリタに指示するには、文字列に何かが発生する必要がありますが、そのようなことがあるかどうかはわかりません。
文字列を取り込んで、.format(**locals())
呼び出しの使用を回避するためにf文字列として解釈する方法はありますか?
理想的にmagic_fstring_function
は、このようにコーディングできるようにしたいです...(私が理解していない部分がどこにあるのか):
template_a = f"The current name is {name}"
# OR [Ideal2] template_a = magic_fstring_function(open('template.txt').read())
names = ["foo", "bar"]
for name in names:
print (template_a)
...この望ましい出力で(ファイルを2回読み取らずに):
The current name is foo
The current name is bar
...しかし、実際に得られる出力は次のとおりです。
The current name is {name}
The current name is {name}
f
文字列ではそれを行うことはできません。f
文字列は、データではない、それは確かに文字列ではありません。それはコードです。(dis
モジュールで確認してください。)後でコードを評価したい場合は、関数を使用します。