国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Python > 正文

Python中format_map()函數(shù)的使用方法

2023-04-25 12:32:02
字體:
供稿:網(wǎng)友

Python中format_map(mapping)函數(shù)的作用與str.format(**mapping)類似,不過,format_map()函數(shù)中的mapping可以直接使用詞典,而不必再加“**”來解析詞典,在"{}"占位符中可以直接使用鍵名稱,不必使用詞典的變量來訪問。

Python中的format_map()函數(shù)是在3.2版中新增的函數(shù),讀者在使用該函數(shù)時(shí)要注意所使用的Python版本。

關(guān)于Python中format()函數(shù)的使用方法,讀者可以參見以下三篇文章:

(1)Python中使用format()函數(shù)格式化字符串

(2)Python中使用format()函數(shù)對(duì)數(shù)字進(jìn)行格式化

(3)Python中format()函數(shù)中的對(duì)齊與寬度問題

Python中的format_map()函數(shù)

format_map()函數(shù)的語法格式

str.format_map(mapping)

str是包含占位符"{}"字符串對(duì)象,mapping是一個(gè)詞典對(duì)象。

該函數(shù)執(zhí)行完后,將會(huì)返回一個(gè)新字符串,新字符串中把str中所有的keys(鍵)用其對(duì)應(yīng)的value(值)來替換。

format_map()函數(shù)的基本使用方法

下面建立一個(gè)詞典,并用詞典作為format_map()函數(shù)的參數(shù),來觀察該函數(shù)的具體使用方法:

dict1 = {"site_name":"武林網(wǎng)VEVB","site_url":"VeVb.com",
         "subscription":"優(yōu)雅的代碼"}
str_source = "{site_name}的網(wǎng)址是:{site_url},公眾號(hào)是:{subscription}"
str_result = str_source.format_map(dict1)
print(str_result)

輸出結(jié)果:

武林網(wǎng)VEVB的網(wǎng)址是:VeVb.com,公眾號(hào)是:優(yōu)雅的代碼

在Python 3.8.2中的輸出形式截圖如下:

Python中format_map()函數(shù)使用案例

詞典中的項(xiàng)比格式化串多的情況

如果詞典中提供的鍵值對(duì)比實(shí)際需要的多會(huì)是是什么情況呢,下面通過一個(gè)例子來說明這種情況:

dict2 = {"lang1":"Java","lang2":"C#","lang3":"Python"}
print("我當(dāng)前在學(xué){lang2}和{lang3}".format_map(dict2))

輸出結(jié)果如下:

我當(dāng)前在學(xué)C#和Python

從實(shí)際情況看,詞典中的鍵值對(duì)多于使用情況并不影響實(shí)際的輸出,也不會(huì)產(chǎn)生任何異常,其在詞典中搜索鍵名并把對(duì)應(yīng)的值替換鍵名處的值即可,不會(huì)產(chǎn)生任何問題。

詞典中未包含格式化中的鍵

如果詞典中未包含使用的鍵會(huì)怎么樣呢?下面這個(gè)例子將告訴你這種情況下的輸出信息:

dict3 = {"lang1":"Java","lang2":"C#","lang3":"Python"}
print("我喜歡{lang4}".format_map(dict3))

輸出結(jié)果如下:

Traceback (most recent call last):
   File "D:/PY/format_map.py", line 2, in <module>
      print("我喜歡{lang4}".format_map(dict3))
KeyError: 'lang4'

從輸出結(jié)果可以看出,程序產(chǎn)生 KeyError 異常,即詞典dict3中并不包含鍵"lang4"。

也就是說,在正常情況下,詞典中若未定義某個(gè)鍵,而在格式字符串中使用了將會(huì)引發(fā)程序異常。

為了較好地解決上面這個(gè)問題,可以定義一個(gè)類和__missing__函數(shù)來處理:

class DealMissingValue(dict):
    def __missing__(self, key):
        return None

dict4 ={"lang1":"Java","lang2":"C#","lang3":"Python"}
print("我喜歡{lang4}".format_map(DealMissingValue(dict4)))

輸出結(jié)果

我喜歡None

可以看出,在使用__missing__函數(shù)處理后,可以在未找到對(duì)應(yīng)的鍵值時(shí),按照函數(shù)的返回值,將以None來替代。

總結(jié)

在使用詞典作為映射關(guān)系來格式化字符串時(shí),format_map函數(shù)是非常有用的,它不像format()函數(shù)那樣建立詞典的副本來進(jìn)行操作,從某種程度上來講,在使用詞典作為參數(shù)時(shí),其效率要比format()函數(shù)高。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吴桥县| 常德市| 自贡市| 双流县| 桃源县| 察哈| 陆良县| 彭水| 达孜县| 苏尼特左旗| 靖边县| 阿合奇县| 花莲市| 怀来县| 闻喜县| 将乐县| 舞阳县| 视频| 依安县| 涟水县| 宁远县| 南开区| 广宗县| 湟中县| 郁南县| 广汉市| 瓦房店市| 南投县| 敦煌市| 淮滨县| 抚远县| 克东县| 德安县| 漾濞| 湘阴县| 静宁县| 阳山县| 黄山市| 灯塔市| 鄱阳县| 甘肃省|