日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于string.Template的简单介绍

發(fā)布時間:2024/8/26 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于string.Template的简单介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  一、簡介

  string模塊定義了一種新字符串類型Template,它簡化了特定的字符串置換操作。

  何謂“簡化”?我們可以先想一下我們之前比較常用的有關(guān)字符串的“置換”操作有哪些:一種是利用%操作符實現(xiàn),另外一種是格式化字符串format實現(xiàn)。那么,相比于這兩種方法,string.Template究竟簡化在何處呢?

  那我們就以下面的代碼為例簡單說明一下string.Template的用法與上述兩種方式的區(qū)別:

# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import stringvalues = {'var':3.3333333} #1 t1 = string.Template(""" Variable : $var Escape : $$ Variable in text: ${var}iable """) print('TEMPLATE:',t1.substitute(values)) print('############################') #2 s = """ Variable : %(var)s Escape : %% Variable in text: %(var)siable """ print('INTERPOLATION:',s % values) print('############################')#3 s1 = """ Variable {var} Escape : {{}} Variable in text: {var}iable """ print('FORMAT:',s1.format(**values))

結(jié)果如下:

  上面的代碼分別利用string.Template方法、%操作符以及format方法進(jìn)行了字符串的置換操作。這里我們可以看出string.Template是利用$符號進(jìn)行“關(guān)聯(lián)”,用substitute方法取值的

  這里直接給出結(jié)論:利用string.Template方法是不需要考慮參數(shù)的數(shù)據(jù)類型的!這是string.Template方法與后面兩種方法最重要的不同之處。string.Template方法直接將參數(shù)轉(zhuǎn)換為字符串格式,然后將轉(zhuǎn)換后的字符串直接插入結(jié)果中去。沒有可用的格式化選項供我們選擇,例如,對于一個浮點數(shù)(如上述例子所示)來講,我們沒辦法控制代表這個浮點數(shù)數(shù)值的位數(shù)。

  二、safe_substitute方法

  上例中我們利用substitute取值。大家肯定會問了:如果$關(guān)聯(lián)的字符串在前面定義的values中不存在怎么辦?難道會報錯嗎?

  答案是肯定的!為了避免上述問題的產(chǎn)生我們利用safe_substitute方法取值,當(dāng)然可以跟原生的substitute方法對比一下:

# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import stringvalues = {'var':'foo'}t = string.Template('$var is here but $missing is not provided')try:print('substitute() :',t.substitute(values)) except KeyError as err:print('ERROR:',str(err))print('safe_substitute():',t.safe_substitute(values))

  結(jié)果如下:

  大家可以看到:values中并沒有代表key的字符串'missing',而我們在Template中卻試圖利用$missing取其對應(yīng)的值。因此substitute方法會報錯,而safe_substitute方法可以巧妙的“避免”這個錯誤,保證程序的流暢性。

  三、進(jìn)階:模塊功能的“修改”

  在實際中,大家可能習(xí)慣利用%操作符去進(jìn)行字符串的置換了,那么,如果我們既想利用string.Template方法的便捷性,又想按照自己的意愿與需求定義額外的功能,這就需要我們新定義一個繼承自string.Template的類(例如命名為MyTempate),在這里修改其中的某些屬性去滿足我們的需求。

  下面代碼中MyTemplate類繼承自string.Template,修改了操作符delimiter與id模式idpattern,實現(xiàn)了利用%關(guān)聯(lián)代表key的字符串,然后利用正則表達(dá)式使safe_substitute()只能匹配出帶下劃線的且由a-z組成的字符串:

# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import stringclass MyTemplate(string.Template):#操作符delimiter = '%'#id模式idpattern = '[a-z]+_[a-z]+'if __name__ == '__main__':template_text = '''Delimiter : %%Replaced : %with_underscoreIgnored : %notunderscored'''d = {'with_underscore':'replaced','notunderscored':'not replaced'}t = MyTemplate(template_text)print('Modified ID pattern:')print(t.safe_substitute(d))

  結(jié)果如下:

  上例中,由于代表key的字符串‘notunderscored’沒有下劃線,沒有匹配到,所以結(jié)果中只能得出%notunderscored,不能取到具體的值。

  需要注意的是:這種方法在實際中非常常用!在實際中我們需要根據(jù)具體的需求靈活的“更改”模塊中某個對象的某個屬性去實現(xiàn)具體的需求!

轉(zhuǎn)載于:https://www.cnblogs.com/paulwhw/p/9231884.html

總結(jié)

以上是生活随笔為你收集整理的关于string.Template的简单介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。