文字列のフォーマット
>>> mail = "hoge@hoge.com" >>> password = "hogehoge" >>> print "mail=%s&password=%s" % (mail, password) mail=hoge@hoge.com&password=hogehoge >>> >>> year = 1989 >>> month = 11 >>> day = 25 >>> print "%d年%d月%d日" % (year, month, day) 1989年11月25日
文字列中の%変換指定(%sや%d)は引数で指定したタプルの要素で、順番に置き換えられます。書式によって右詰にしたり左詰にしたり、足りない部分を0で埋めたりといったことができます。詳しくはここを見るとよいです。
引数に辞書を渡すこともできますが、フォーマット文字列の書式が少し違います。
>>> query = {"mail":"hoge@hoge.com", "password":"hogehoge"} >>> print "mail=%(mail)s&password=%(password)s" % query mail=hoge@hoge.com&password=hogehoge >>> >>> date = {"year":1989, "month":11, "day":25} >>> print "%(year)d年%(month)d月%(day)d日" % date 1989年11月25日
vars( )は現在参照できる変数名とその値を辞書にして返します。
>>> mail = "hoge@hoge.mail" >>> password = "hogehoge" >>> print "mail=%(mail)s&password=%(password)s" % vars() mail=hoge@hoge.mail&password=hogehoge >>> >>> year = 1984 >>> year = 1989 >>> month = 11 >>> day = 25 >>> print "%(year)d年%(month)d月%(day)d日" % vars() 1989年11月25日
vars( )が返す辞書には必要ない変数も含まれます。当然、タプルを渡す場合と比べると遅いです。
from timeit import Timer setup = """ mail = "hoge@hoge.com" password = "hogehoge" """ stmt1 = "'mail=%s&password=%s' % (mail, password)" stmt2 = "'mail=%(mail)s&password=%(password)s' % vars()" print Timer(stmt1, setup).repeat(3, 100000) print Timer(stmt2, setup).repeat(3, 100000)
[1.0013032400811277, 0.88645803650748412, 0.91006805343703379] [2.3239804555892656, 2.3187373237902076, 2.3770830888885168]
思ったよりも差がありました。