这里是the docs 关于“新”格式语法的内容。一个例子是:
"({:d} goals, ${:d})".format(self.goals, self.penalties)
如果goals 和penalties 都是整数(即它们的默认格式没问题),它可以缩短为:
"({} goals, ${})".format(self.goals, self.penalties)
由于参数是self 的字段,因此还有一种方法可以使用单个参数两次(正如@Burhan Khalid 在 cmets 中指出的那样):
"({0.goals} goals, ${0.penalties})".format(self)
解释:
-
{} 表示只是下一个位置参数,具有默认格式;
-
{0} 表示索引为0 的参数,默认格式;
-
{:d} 是下一个位置参数,采用十进制整数格式;
-
{0:d} 是索引为0 的参数,采用十进制整数格式。
在选择参数(使用命名参数而不是位置参数、访问字段等)和许多格式选项(填充数字、使用千位分隔符、是否显示符号等)时,您还可以做许多其他事情)。其他一些例子:
"({goals} goals, ${penalties})".format(goals=2, penalties=4)
"({goals} goals, ${penalties})".format(**self.__dict__)
"first goal: {0.goal_list[0]}".format(self)
"second goal: {.goal_list[1]}".format(self)
"conversion rate: {:.2f}".format(self.goals / self.shots) # '0.20'
"conversion rate: {:.2%}".format(self.goals / self.shots) # '20.45%'
"conversion rate: {:.0%}".format(self.goals / self.shots) # '20%'
"self: {!s}".format(self) # 'Player: Bob'
"self: {!r}".format(self) # '<__main__.Player instance at 0x00BF7260>'
"games: {:>3}".format(player1.games) # 'games: 123'
"games: {:>3}".format(player2.games) # 'games: 4'
"games: {:0>3}".format(player2.games) # 'games: 004'
注意:正如其他人指出的那样,新格式不会取代前者,两者都在 Python 3 和较新版本的 Python 2 中可用。有人可能会说这是一个偏好问题,但恕我直言,新的比旧的更具表现力,并且应该在编写新代码时使用(当然,除非它针对的是旧环境)。