这两段代码的效果是一样的:
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谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?
PHPz2017-04-18 09:31:24
件名は私のコメントで %
について言及しました。str.format()
公式ドキュメント (str.format - python2) には次の文章があります:
この文字列フォーマット方法は Python 3 の新しい標準であり、「新しいコードでの文字列フォーマット操作」で説明されている % フォーマットよりも優先されるべきです。
おそらく次のことを意味します:
このメソッドは
Python 3
の新しい標準です。開発者は、文字列をフォーマットするために%
ではなく、最初にこのメソッドを 使用する必要があります。 (format
はバージョン2.6
を追加する方法です)
つまり、最初の質問では、Template
と format
が代替品であるかどうかについて言及しましたが、実際には、format
は実際には %
の代替品ではありません。
公式がそう言っているので、今後文字列の書式設定を行う場合は、format
ではなく %
を使用することをお勧めします。
Template
は string
モジュールのクラスであり、format
は __buildin__
モジュールの組み込み関数です。これが 2 つの根本的な違いです。
はクラスであるため、それを継承し、必要に応じてコンテンツを書き換えることができます。たとえば、デフォルトの区切り文字 $
を次のように変更できます。
リーリー
リーリー
同様に、さらにやりたいことを実現できるのが、クラスとして実現できる「プライベートカスタマイズ」です。さらに、
に関しては、実際には応用範囲が非常に広く、例で挙げたものに加えて、以下のものも一般的に使用されます。
リーリー
format
そして非常に重要なパディングの位置合わせ、精度、さらには基底変換です:
つまり、
と の適用方向はまったく異なります。 Template
巴扎黑2017-04-18 09:31:24
sorted 関数と list.sort() が同時に存在することに驚きませんか?
同様の機能を持つ関数は、通常、特殊な アプリケーション シナリオ を対象としています。たとえば、 sorted には戻り値があり、sort はオブジェクトを直接変更します。
string.Template と str.format の場合、string.Template はその名前のとおり、テンプレートの定義に適しており、後で使用できます。たとえば、関数またはパッケージでテンプレートを定義する場合に使用できます。いつでも詳細を知らなくても電話できるので便利です。 str.format() は通常、単一行の式に使用され、より柔軟に使用できます。