Python 3で追加されたformat
を使うと文字列操作が便利になります。
使い方は次のような感じです。(参考:Pythonの新しい文字列書式操作)
>>> '{0} + {1} = {2}'.format(1, 2, 1+2)
'1 + 2 = 3'
string.Formatter
を継承すると、この文字列操作を拡張することができるそうです。
拡張の仕方は以下のような感じです。
class Formatter(string.Formatter):
def format_field(self, value, spec):
# 必要な処理
return 'value'
サンプル
このstring.Formatter
を継承してupper
かlower
を書式指定文字列に使うと大文字・小文字に変換するサンプルを作ってみました。
import string
class Formatter(string.Formatter):
def format_field(self, value, spec):
if spec == 'upper': value, spec = value.upper(), ''
elif spec == 'lower': value, spec = value.lower(), ''
return super(Formatter, self).format_field(value, spec)
使い方は以下のような感じです。
>>> f = Formatter()
>>> f.format('{name} {name:upper} {name:lower}', name='Alice')
'Alice ALICE alice'
template engine
このString Formattingを使ってtemplate engineのようなことを実装したサンプルのようなものも公開されているみたいです。
GitHub – ebrehault/superformatter
https://github.com/ebrehault/superformatter
repeat
、call
、if
に対応していて、次のような感じで使えます。
>>> from engine import SuperFormatter
>>> sf = SuperFormatter()
>>> print(sf.format('{n:repeat:n={{item}}\n}', n=[2,3,5,7]))
n=2
n=3
n=5
n=7
現状ではサンプル程度のものかと思いますが、面白そうなテクニックかなと思います。
リンク
string — Common string operations — Python 3.7.2 documentation
https://docs.python.org/3/library/string.html
The world’s simplest Python template engine — Makina Corpus
https://makina-corpus.com/blog/metier/2016/the-worlds-simplest-python-template-engine