python之字符串中插入變量


方法一:也是 比較好用的,功能教齊全

s="{name} is {sex}"
print(s.format(name="zzy",sex="girl"))   # zzy is girl
如果要被替換的變量能在變量域中找到, 那么你可以結合使用 format_map() 和 vars()
vars()找到所有局部變量
name="zxc"
sex="boy"
print(s.format_map(vars()))    # zxc is boy
vars() 還有一個有意思的特性就是它也適用於對象實例。
class Info:
    def __init__(self,name,sex):
        self.name=name
        self.sex=sex

a=Info("zzz","beautiful")
print(s.format_map(vars(a)))   # zzz is beautiful

缺陷:format 和 format_map() 的一個缺陷就是它們並不能很好的處理變量缺失的情況

s = "{name} is {sex}"
print(s.format(name='Guido'))
報錯:
"""
Traceback (most recent call last):
  File "/home/zzy/PycharmProjects/MyTest/littleTest.py", line 301, in <module>
    print(s.format(name='Guido'))
KeyError: 'sex'
"""

解決:

我們把參數sex 手動清除

s = "{name} is {sex}"
name = "zxc"
class safesub(dict):
    """防止key找不到"""

    def __missing__(self, key):
        return '{' + key + '}'


print(s.format_map(safesub(vars())))  # zxc is {sex}
# 映射或者字典類中鮮為人知的 __missing__() 方法可以讓你定義如何處理缺失的值。 在 SafeSub 類中,這個方法被定義為對缺失的值返回一個占位符。 你可以發現缺失的值會出現在結果字符串中(在調試的時候可能很有用),而不是產生一個 KeyError 異常
如果你發現自己在代碼中頻繁的執行這些步驟,你可以將變量替換步驟用一個工具函數封裝起來。就像下面這樣:
import sys


def sub(text):
    return text.format_map(safesub(sys._getframe(1).f_locals))

print(sys._getframe().f_locals)
print(sub(s))   # zxc is {sex}


#注釋:1:,sub() 函數使用 sys._getframe(1) 返回調用者的棧幀。可以從中訪問屬性 f_locals 來獲得局部變量

方法二: 實現功能的還有一種方法,就是模板字符串,但是教之format_map var 就low一些了,,也是沒法處理變量缺失問題使用 format() 方法還有一個好處就是你可以獲得對字符串格式化的所有支持(對齊,填充,數字格式化等待)

import string
n=24
s = string.Template('$name has $n messages.')
print(s.substitute(vars()))   # zxc has 24 messages.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM