私は通常、次のパターンを使用します(この質問で述べたように):
a=1
s= "{a}".format(**locals())
読みやすいコードを書くのに最適な方法だと思います。
複雑な文字列の作成を「モジュール化」するために、文字列フォーマットを「連鎖」すると便利な場合があります。
a="1"
b="2"
c="{a}+{b}".format(**locals())
d="{c} is a sum".format(**locals())
#d=="1+2 is a sum"
すぐに、コードはX.format(**locals())
. この問題を解決するために、ラムダを作成しようとしました。
f= lambda x: x.format(**locals())
a="1"
b="2"
c= f("{a}+{b}")
d= f("{c} is a sum")
しかしlocals()
、ラムダのローカルであるため、これは KeyError をスローします。
また、最後の文字列にのみフォーマットを適用しようとしました:
a="1"
b="2"
c="{a}+{b}"
d="{c} is a sum".format(**locals())
#d=="{a}+{b} is a sum"
しかし、Python は 1 回しかフォーマットしないため、これは機能しません。これで、何もすることがなくなるまで繰り返しフォーマットする関数を書くことができます。
def my_format( string, vars ):
f= string.format(**vars)
return f if f==string else my_format(f, vars)
しかし、私は疑問に思っています:これを行うためのより良い方法はありますか?