Python字符串format_map()
时间:2020-02-23 14:43:26 来源:igfitidea点击:
Python字符串format_map()函数使用提供的映射中的替换返回字符串的格式化版本。
替换参数出现在字符串中,并用花括号({})标识。
Python字符串format_map()
此功能在Python 3.2中引入。
它的语法是:
str.format_map(mapping)
我们来看一些format_map()函数的示例。
s = 'My name is {name} and I am a {job_title}' my_dict = {'name': 'hyman', 'job_title': 'Software Engineer'} print(s.format_map(my_dict)) print(s.format(**my_dict))
输出:
My name is hyman and I am a Software Engineer My name is hyman and I am a Software Engineer
如果映射包含的键数超过了格式化时实际需要的数,该怎么办?
my_dict = {'name': 'Meghna', 'job_title': 'Writer', 'company': 'theitroad'} print(s.format_map(my_dict)) print(s.format(**my_dict))
输出:
My name is Meghna and I am a Writer My name is Meghna and I am a Writer
如果映射缺少键怎么办?
my_dict = {'name': 'hyman'} print(s.format_map(my_dict))
输出:KeyError:'job_title'
如果我们使用字符串format()函数,请看一下输出。
print(s.format(**my_dict))
输出:KeyError:'job_title'
format_map()与format()
Python字符串format_map()函数与format()函数非常相似。
唯一的区别是,映射直接使用,而不复制到字典中。
当映射是dict子类时,这很有用。
如果查看上述示例,则format()和format_map()函数的行为完全相同。
让我们看看当映射是dict的子类时,它有何不同。
class MyDict(dict): def __missing__(self, key): return '#Not Found#' s = 'My name is {name} and I am a {job_title}' my_dict = MyDict(name='hyman') print(my_dict) print(s.format_map(my_dict))
输出:我叫hyman,我是#Not Found#
因此,当缺少键时,将调用__missing__函数,并使用输出替换替换。
让我们看看如果尝试在此处使用format()函数会发生什么。
print(s.format(**my_dict))
输出:KeyError:'job_title'
字符串format()函数引发错误,因为它正在将提供的映射复制到新的dict对象。
因此,从未使用实现了__missing__函数的子类,因此会出现错误。