ホームページ  >  に質問  >  本文

python - string.Template与str.format()为什么同时存在

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

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

迷茫迷茫2714日前884

全員に返信(2)返信します

  • PHPz

    PHPz2017-04-18 09:31:24

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

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

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

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

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

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

    元の回答:

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

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

    出力結果:

    リーリー

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

    さらに、

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

    リーリー

    つまり、

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:31:24

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

    リーリー

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

    返事
    0
  • キャンセル返事