python - string.Template与str.format()为什么同时存在
迷茫
迷茫 2017-04-18 09:29:24
0
2
953

这两段代码的效果是一样的:

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谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(2)
PHPzhong

件名は私のコメントで % について言及しました。str.format() 公式ドキュメント (str.format - python2) には次の文章があります:

この文字列フォーマット方法は Python 3 の新しい標準であり、「新しいコードでの文字列フォーマット操作」で説明されている % フォーマットよりも優先されるべきです。

おそらく次のことを意味します:

このメソッドは Python 3 の新しい標準です。開発者は、文字列をフォーマットするために % ではなく、最初にこのメソッドを 使用する必要があります。 (formatはバージョン2.6を追加する方法です)

つまり、最初の質問では、Templateformat が代替品であるかどうかについて言及しましたが、実際には、format は実際には % の代替品ではありません。

公式がそう言っているので、今後文字列の書式設定を行う場合は、format ではなく % を使用することをお勧めします。

元の回答:

Templatestring モジュールのクラスであり、format__buildin__ モジュールの組み込み関数です。これが 2 つの根本的な違いです。

はクラスであるため、それを継承し、必要に応じてコンテンツを書き換えることができます。たとえば、デフォルトの区切り文字 $ を次のように変更できます。 リーリー

出力結果:

リーリー

同様に、さらにやりたいことを実現できるのが、クラスとして実現できる「プライベートカスタマイズ」です。

さらに、

に関しては、実際には応用範囲が非常に広く、例で挙げたものに加えて、以下のものも一般的に使用されます。 リーリー formatそして非常に重要なパディングの位置合わせ、精度、さらには基底変換です:

リーリー

つまり、

の適用方向はまったく異なります。 Template

いいねを押す +0
巴扎黑

sorted 関数と list.sort() が同時に存在することに驚きませんか?
同様の機能を持つ関数は、通常、特殊な アプリケーション シナリオ を対象としています。たとえば、 sorted には戻り値があり、sort はオブジェクトを直接変更します。

リーリー

string.Template と str.format の場合、string.Template はその名前のとおり、テンプレートの定義に適しており、後で使用できます。たとえば、関数またはパッケージでテンプレートを定義する場合に使用できます。いつでも詳細を知らなくても電話できるので便利です。 str.format() は通常、単一行の式に使用され、より柔軟に使用できます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート