pythonでフォーマット文字列を使う

pythonだと文字列中の変数展開が出来ないので、同様の結果を得る為にsprintfの様なフォーマット操作をします。少し取っ付きにくいのはsprintfとは構文が違っていて、%(モジュロ演算子)と辞書を使うことです。

# フォーマット文字列 % 辞書
"param1 is %(p1)d, param2 is %(p2)s" % {'p1':10, 'p2':'some text'}

フォーマット文字列に続いてモジュロ演算子と辞書を続けて書きます。文字列中に「%(キー名)変数型」と書く事で辞書中の値を参照できます。

さて、この方法ですと辞書のキーを参照するので、ソースコードも見やすく、複数回同じ値を参照し易いのですが、一方で変数や辞書の値をいちいち用意するのが面倒な場合も多いです。そう思いながらふとマニュアルを見てみると、辞書の代わりにタプルを使って値の参照を出来るようです。ソースコードで見た方が解り易いですね。最後の行がタプルでの値参照になります。

# 辞書から変数を抜き出す
print "%(item)sは%(price)d円です。" % {'item':'リンゴ', 'price':100}

# localsでローカル変数から作った辞書を使う
item  = 'バナナ'
price = 200
text  = "%(item)sは%(price)d円です。"
print text % locals()

# 辞書の代わりにタプルを使うと変数が必要ないので、計算結果等を参照したい時に便利
discount = 20
print "%sはセール中なので%d円引きで、%d円です" % (item, discount, price - discount)

以上、タプルでの参照方法を忘れていたのでメモ書きでした。

Leave a Reply

Your email address will not be published. Required fields are marked *