我们不是只能传递字符串变量给 format 方法,任何基本范例,例如可以被打印出来的整数或浮点数都可以。更风趣的是,复杂对象,包罗列表、元组、字典以及恣意对象都可以使用;在 format 的字符串中我们可以通过索引和对象的属性(方法不可)访问变量。例如在下面的例子中,我们输出一个邮件消息,我们在邮箱地点中将发件人和收件人组合成元组,并将主题和消息存放在字典中,就可以如许来格式化:
emails = ("a@example.com", "b@example.com")
message = {
'subject': "You Have Mail!",'message': "Here's some mail for you!"
}
template = """
From: <{0[0]}>
To: <{0[1]}>
Subject: {message[subject]}
{message[message]}"""
print(template.format(emails, message=message))
复制代码
我们在传递 emails 元组时传递了一个基于位置的参数,这两个邮箱地点可以通过 0[x]得到,其中 x 可以是 0 或 1,表现元组中第一个或第二个元素。第一个 0 表现传入 format 的第一个位置参数(在这个例子中是 emails 元组)。
我们在传递 message 字典时传递了一个基于关键字的参数,其中通过字符串键名访问字典时,使用 message[subject]和 message[message],注意这里宁静常访问字典中值时有所不同,我们不需要加引号。
可以看到输出的类名和内容已经被两个参数所更换,而双花括号被更换为单花括号,结果得到的就是一段合法的 Java 代码。只要在模板中看到{{或}},也就是用于封闭 Java 类和方法界说的符号。我们知道 format 方法会将它们更换为单个的花括号符号,而不是更换为传入 format 方法的参数。
这里,我们也总结了常用的一些格式化标准符号使用方法: