这两段代码的效果是一样的:
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谁的历史更久? 为什么会出现功能一样的库呢? 是不是一个是另一个的替代品呢?
題主在我的評論裡提到
%
,在str.format()
官方文檔(str.format - python2)裡有這麼一段話:大概意思是說:
所以題主原問題裡提到
Template
和format
是不是有替代关系,实际情况是,那俩家伙并没有,反而format
却真的是%
的替代品。既然官方都這麼說了,所以我建議以後涉及到字串格式化操作的時候,能用
format
就不要用%
了。原答案:
Template
是string
模块里的类,format
是__buildin__
模組裡的內建函數,這是兩者的根本區別。既然是類,就可以繼承並根據自己的需求重寫裡面的內容,譬如默認的定界符
$
,我們就可以修改:輸出結果:
同理,我們還可以做更多自己想要的東西,這就是作為類可以做到的「私人訂做」。
另外關於
format
,它的應用範圍其實非常廣,除了你例子中說到的,我們常用的還有以下一些用法:以及非常重要的填充對齊、精確度,甚至轉換進位:
所以
Template
和Template
和format
的應用方向也是完全不同的。你為什麼不詬異為什麼sorted函數和list.sort()同時存在呢?
作用類似的函數一般都是針對特殊的應用場景,例如soreted具有回傳值而sort直接更改物件。
對於string.Template 和str.format來說,string.Template如它的名稱所述,適用於定義模板,可以延後使用,例如你在一個函數或套件裡定義好模板,可以在任意時間方便的呼叫而不必知道它的細節。而str.format()一般用於單行的表達式,使用比較靈活。