天天看點

《Python Cookbook(第2版)中文版》——1.17 替換字元串中的子串—Python 2.4

本節書摘來自異步社群《python cookbook(第2版)中文版》一書中的第1章,第1.17節,作者[美]alex martelli , anna martelli ravenscrof , david ascher ,高鐵軍 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

任務

在python 2.4的環境下,你想完成這樣的任務:給定一個字元串,通過查詢一個字元串替換字典,将字元串中被标記的子字元串替換掉。

解決方案

python 2.4提供了一個新的string.template類,可以應用于這個任務。下面給出一段代碼以展示怎樣使用這個類:

讨論

python 2.3中,用于标記—替換的字元串格式被寫為更加繁瑣的形式:

辨別符被放在一對括弧中,括弧前面一個%,後面一個s。然後,還需要使用%操作符,使用的格式是将需要處理的字元串放在%操作符左邊并在右邊放上字典:

當然,這樣的代碼在python 2.4中也可以正常工作。不過,新的string.template提供了一個更簡單的替代方法。

當你建立string.template執行個體時,在字元串格式中,可以用兩個美元符($)來代表$,還可以讓那些需要被替換的辨別後面直接跟上用于替換的文本或者數字,并用一對花括号({ })将它們括起來。下面是一個例子:

有時,為了給substitute準備一個字典做參數,最簡單的方法是設定一些本地變量,然後将所有這些變量交給locals()(此函數将建立一個字典,字典的key就是本地變量,本地變量的值可通過key來通路):

另一個簡單的辦法是使用關鍵字參數文法而非字典,直接将值傳遞給substitute:

甚至可以同時傳遞字典和關鍵字參數:

為了防止字典的條目和關鍵字參數顯式傳遞的值發生沖突,關鍵字參數優先。比如: