这两段代码的效果是一样的:
from string import Template
template = Template('hi, ${name}')
msg = template.substitute(name=u'张三')
print msg
与
msg = u'hi, {name}'
msg = msg.format(name=u'张三')
print msg
我的问题是, string.Template与str.format谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?
件名は私のコメントで
%
について言及しました。str.format()
公式ドキュメント (str.format - python2) には次の文章があります:おそらく次のことを意味します:
つまり、最初の質問では、
Template
とformat
が代替品であるかどうかについて言及しましたが、実際には、format
は実際には%
の代替品ではありません。公式がそう言っているので、今後文字列の書式設定を行う場合は、
format
ではなく%
を使用することをお勧めします。元の回答:
Template
はstring
モジュールのクラスであり、format
は__buildin__
モジュールの組み込み関数です。これが 2 つの根本的な違いです。はクラスであるため、それを継承し、必要に応じてコンテンツを書き換えることができます。たとえば、デフォルトの区切り文字
出力結果:$
を次のように変更できます。 リーリーリーリー
同様に、さらにやりたいことを実現できるのが、クラスとして実現できる「プライベートカスタマイズ」です。に関しては、実際には応用範囲が非常に広く、例で挙げたものに加えて、以下のものも一般的に使用されます。 リーリー
リーリーformat
そして非常に重要なパディングの位置合わせ、精度、さらには基底変換です:つまり、
との適用方向はまったく異なります。
Template
sorted 関数と list.sort() が同時に存在することに驚きませんか?
リーリー同様の機能を持つ関数は、通常、特殊な アプリケーション シナリオ を対象としています。たとえば、 sorted には戻り値があり、sort はオブジェクトを直接変更します。
string.Template と str.format の場合、string.Template はその名前のとおり、テンプレートの定義に適しており、後で使用できます。たとえば、関数またはパッケージでテンプレートを定義する場合に使用できます。いつでも詳細を知らなくても電話できるので便利です。 str.format() は通常、単一行の式に使用され、より柔軟に使用できます。