Python 3 中的字符串格式化

新手上路,请多包涵

我在 Python 2 中这样做:

 "(%d goals, $%d)" % (self.goals, self.penalties)

这个的 Python 3 版本是什么?

我尝试在线搜索示例,但我一直在获取 Python 2 版本。

原文由 JoseBazBaz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 565
2 个回答

这是关于“新”格式语法 的文档。一个例子是:

 "({:d} goals, ${:d})".format(self.goals, self.penalties)

如果 goalspenalties 都是整数(即它们的默认格式是好的),它可以缩短为:

 "({} goals, ${})".format(self.goals, self.penalties)

由于参数是 self 的字段,因此还有一种使用单个参数两次的方法(如@Burhan Khalid 在评论中指出的那样):

 "({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 中都可用。有些人可能会说这是一个偏好问题,但恕我直言,新的比旧的更具表现力,并且应该在编写新代码时使用(当然,除非它针对的是旧环境)。

原文由 mgibsonbr 发布,翻译遵循 CC BY-SA 3.0 许可协议

Python 3.6 现在支持使用 PEP 498 的速记文字字符串插值。对于您的用例,新语法很简单:

 f"({self.goals} goals, ${self.penalties})"

这与之前的 .format 标准 类似,但可以轻松地执行以下操作:

 >>> width = 10
>>> precision = 4
>>> value = decimal.Decimal('12.34567')
>>> f'result: {value:{width}.{precision}}'
'result:      12.35'

原文由 JDong 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题