6.2.3 字典的格式化字符串

在5.2.1节讲过使用百分号(%)配合元组对字符串进行格式化的方式。在字符串中使用%s、%d等格式表示要替换的值,这个字符串可以成为模板,然后用字符串模板与元组通过%进行格式化。

'xyz %d abc %s' % (20,'OK')

如果使用字典对字符串进行格式化,要比使用元组更酷。因为在字符串模板中可以用命名的方式指定格式化参数。在Python2.x中,仍然可以使用%运算符和字典对字符串进行格式化,不过在Python3中,改用了字符串的format_map方法,而且格式化参数需要用一对花括号{}括起来,格式化字符串的具体使用方法见例6.3。

[例 6.3] 本例演示了如何使用字符串的format_map方法和字典对字符串进行格式化,并与使用元组和%对字符串进行格式化的方式进行对比,大家可以看看哪个更为酷炫一些。

values1 = (1,3,'hello')             #定义一个格式化参数元组
str1 = 'abc %d,xyz %d, %s world'    #定义一个字符串模板
print(str1 % values1)               #使用%和元组格式化字符串

#定义一个格式化参数字典
values2 = {'title':'url':'','company':'Python进阶之路'}

#定义一个字符串模板
str2 = """
<html>
    <head>
        <title>{title}</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1>{title}</h1>
        <a href="{url}">{company}</a>
    </body>
</html>
"""
print(str2.format_map(values2))         #使用format_map方法格式化字符串

输出结果:

abc 1,xyz 3, hello world

<html>
    <head>
        <title>我的博客</title>
        <meta charset="utf-8" />
    </head>
    <body>
        <h1>我的博客</h1>
        <a href="">Python进阶之路</a>
    </body>
</html>

可以看到,format_map方法使用的字符串模板中,格式化参数使用一对花括号{}表示,花括号里面就是格式化参数的名字,如’{title}’,这个格式化参数名也是字典中的key。使用字典提供格式化参数值的好处是不需要按字符串模板中的顺序指定格式化参数值,而且同一个格式化参数可以放在多个位置,在格式化时会替换所有同名的格式化参数。如本例中的{title}放在了两个位置。如果格式化模板中的格式化参数名在字典中未找到,系统则会抛出异常。