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__函数的子类,因此会出现错误。