- ·上一篇内容:Python中format()函数中的对齐与宽度问题
- ·下一篇内容:Python中实现三元条件运算符的方法
Python中format_map()函数的使用方法
Python中format_map(mapping)函数的作用与str.format(**mapping)类似,不过,format_map()函数中的mapping可以直接使用词典,而不必再加“**”来解析词典,在"{}"占位符中可以直接使用键名称,不必使用词典的变量来访问。
Python中的format_map()函数是在3.2版中新增的函数,读者在使用该函数时要注意所使用的Python版本。
关于Python中format()函数的使用方法,读者可以参见以下三篇文章:
(2)Python中使用format()函数对数字进行格式化
format_map()函数的语法格式
str.format_map(mapping)
str是包含占位符"{}"字符串对象,mapping是一个词典对象。
该函数执行完后,将会返回一个新字符串,新字符串中把str中所有的keys(键)用其对应的value(值)来替换。
format_map()函数的基本使用方法
下面建立一个词典,并用词典作为format_map()函数的参数,来观察该函数的具体使用方法:
dict1 = {"site_name":"翔宇亭IT乐园","site_url":"biye5u.com",
"subscription":"优雅的代码"}
str_source = "{site_name}的网址是:{site_url},公众号是:{subscription}"
str_result = str_source.format_map(dict1)
print(str_result)
输出结果:
翔宇亭IT乐园的网址是:biye5u.com,公众号是:优雅的代码
在Python 3.8.2中的输出形式截图如下:
词典中的项比格式化串多的情况
如果词典中提供的键值对比实际需要的多会是是什么情况呢,下面通过一个例子来说明这种情况:
dict2 = {"lang1":"Java","lang2":"C#","lang3":"Python"}
print("我当前在学{lang2}和{lang3}".format_map(dict2))
输出结果如下:
我当前在学C#和Python
从实际情况看,词典中的键值对多于使用情况并不影响实际的输出,也不会产生任何异常,其在词典中搜索键名并把对应的值替换键名处的值即可,不会产生任何问题。
词典中未包含格式化中的键
如果词典中未包含使用的键会怎么样呢?下面这个例子将告诉你这种情况下的输出信息:
dict3 = {"lang1":"Java","lang2":"C#","lang3":"Python"}
print("我喜欢{lang4}".format_map(dict3))
输出结果如下:
Traceback (most recent call last):
File "D:/PY/format_map.py", line 2, in <module>
print("我喜欢{lang4}".format_map(dict3))
KeyError: 'lang4'
从输出结果可以看出,程序产生 KeyError 异常,即词典dict3中并不包含键"lang4"。
也就是说,在正常情况下,词典中若未定义某个键,而在格式字符串中使用了将会引发程序异常。
为了较好地解决上面这个问题,可以定义一个类和__missing__函数来处理:
class DealMissingValue(dict):
def __missing__(self, key):
return None
dict4 ={"lang1":"Java","lang2":"C#","lang3":"Python"}
print("我喜欢{lang4}".format_map(DealMissingValue(dict4)))
输出结果
我喜欢None
可以看出,在使用__missing__函数处理后,可以在未找到对应的键值时,按照函数的返回值,将以None来替代。
总结
在使用词典作为映射关系来格式化字符串时,format_map函数是非常有用的,它不像format()函数那样建立词典的副本来进行操作,从某种程度上来讲,在使用词典作为参数时,其效率要比format()函数高。
微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。
个人成长离不开各位的关注,你的关注就是我继续前行的动力。