您好,登錄后才能下訂單哦!
假如有個任務: 給定一個字符串,通過查詢字典,來替換給定字符中的變量。如果使用通常的方法:
>>> "This is a %(var)s" % {"var":"dog"} 'This is a dog' >>>
其實可以使用string.Template類來實現上面的替換
>>> from string import Template >>> words = Template("This is $var") >>> print(words.substitute({"var": "dog"})) # 通過字典的方式來傳參 This is dog >>> print(words.substitute(var="dog")) # 通過關鍵字方式來傳參 This is dog >>>
在創建Template實例時,在字符串格式中,可以使用兩個美元符來代替$,還可以用${}將 變量擴起來,這樣的話,變量后面還可以接其他字符或數字,這個使用方式很像Shell或者Perl里面的語言。下面以letter模板來示例一下:
>>> from string import Template >>> letter = """Dear $customer, ... I hope you are having a great time! ... If you do not find Room $room to your satisfaction, let us know. ... Please accept this $$5 coupon. ... Sincerely, ... $manager, ... ${name}Inn""" >>> template = Template(letter) >>> letter_dict = {"name": "Sleepy", "customer": "Fred Smith", "manager": "Tom Smith", "room": 308} >>> print(template.substitute(letter_dict)) Dear Fred Smith, I hope you are having a great time! If you do not find Room 308 to your satisfaction, let us know. Please accept this $5 coupon. Sincerely, Tom Smith, SleepyInn >>>
有時候,為了給substitute準備一個字典做參數,最簡單的方法是設定一些本地變量,然后將這些變量交給local()(此函數創建一個字典,字典中的key就是本地變量,本地變量的值通過key來訪問)。
>>> locals() # 剛進入時,沒有其他變量 {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None} >>> name = "Alice" # 創建本地變量name >>> age = 18 # 創建本地變量age >>> locals() # 再執行locals()函數就可以看到name, age的鍵值隊 {'name': 'Alice', '__builtins__': <module '__builtin__' (built-in)>, 'age': 18, '__package__': None, '__name__': '__mai __', '__doc__': None} >>> locals()["name"] # 通過鍵name來獲取值 'Alice' >>> locals()["age"] # 通過鍵age來獲取值 18 >>>
有了上面的例子打底來看一個示例:
>>> from string import Template >>> msg = Template("The square of $number is $square") >>> for number in range(10): ... square = number * number ... print msg.substitute(locals()) ... The square of 0 is 0 The square of 1 is 1 The square of 2 is 4 The square of 3 is 9
另外一種方法是使用關鍵字參數語法而非字典,直接將值傳遞給substitute。
>>> from string import Template >>> msg = Template("The square of $number is $square") >>> for i in range(4): ... print msg.substitute(number=i, square=i*i) ... The square of 0 is 0 The square of 1 is 1 The square of 2 is 4 The square of 3 is 9 >>>
甚至可以同時傳遞字典和關鍵字
>>> from string import Template >>> msg = Template("The square of $number is $square") >>> for number in range(4): ... print msg.substitute(locals(), square=number*number) ... The square of 0 is 0 The square of 1 is 1 The square of 2 is 4 The square of 3 is 9 >>>
為了防止字典的條目和關鍵字參數顯示傳遞的值發生沖突,關鍵字參數優先,比如:
>>> from string import Template >>> msg = Template("It is $adj $msg") >>> adj = "interesting" >>> print(msg.substitute(locals(), msg="message")) It is interesting message
以上這篇在Python中實現替換字符串中的子串的示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。