国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 怀来县| 广德县| 内黄县| 赤壁市| 德钦县| 玉溪市| 万源市| 鄢陵县| 宁武县| 定西市| 京山县| 永年县| 秦皇岛市| 海阳市| 桐城市| 长丰县| 孙吴县| 垣曲县| 卢湾区| 永顺县| 盐城市| 丹棱县| 海伦市| 改则县| 安塞县| 闽侯县| 道孚县| 攀枝花市| 论坛| 黄梅县| 葫芦岛市| 南宁市| 河池市| 天峻县| 通榆县| 光山县| 天全县| 桂阳县| 临沭县| 武功县| 福建省|