新しい高度な文字列フォーマットの代わりにテンプレート文字列を使用する利点があるかどうか疑問に思っていましたか?
4 に答える
テンプレートは、表現力を犠牲にして、通常の文字列フォーマットよりも単純にすることを目的としています。PEP 292の理論的根拠は、テンプレートをPythonの%
スタイルの文字列フォーマットと比較します。
printf()
Pythonは現在、Cの「%」フォーマット文字に基づく文字列置換構文をサポートしています。非常に豊富ですが、%-formattingコードは、経験豊富なPythonプログラマーであっても、エラーが発生しやすくなります。よくある間違いは、末尾のフォーマット文字を省略してしまうことです。たとえば、s
in%(name)s
。さらに、%記号に続くことができるものの規則はかなり複雑ですが、通常のアプリケーションがそのような複雑さを必要とすることはめったにありません。ほとんどのスクリプトは文字列補間を行う必要がありますが、それらのほとんどは単純な「文字列化」形式を使用します。つまり
%s
、%(name)s
この形式はより単純でエラーが発生しにくいものにする必要があります。
新しい.format()
ものは状況を改善しましたが、フォーマット文字列の構文がかなり複雑であることは事実です。そのため、理論的根拠にはまだポイントがあります。
これは主に構文の好みの問題であり、通常、怠惰/冗長性のトレードオフと、既存の文字列テンプレートシステムに精通している/習慣になります。この場合、テンプレート文字列はより怠惰/単純/迅速に記述できます.format()
が、より冗長で機能が豊富です。
PHP言語またはJinjaファミリーのテンプレートシステムに慣れているプログラマーは、テンプレート文字列を好むかもしれません。「%s」の位置スタイルのタプル置換を使用すると、printf
文字列の書式設定などを使用する人や、何かをすばやく実行したい人にアピールする可能性があります。.format()
にはさらにいくつかの機能がありますが、提供するだけの特定のものが必要でない限り.format()
、既存のスキームを使用しても問題はありません。
注意すべき唯一のことは、名前付き文字列テンプレートは、順序に依存するものよりも柔軟性があり、メンテナンスが少なくて済むことです。それ以外は、すべて個人的な好みか、作業中のプロジェクトのコーディング標準のいずれかになります。