带百分号的 Python 字符串格式

新手上路,请多包涵

我正在尝试执行以下操作:

 >>> x = (1,2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x[0], x[1], y)
'1,2,hello'

但是,我有一个 long x ,超过两个项目,所以我尝试了:

 >>> '%d,%d,%s' % (*x, y)

但这是语法错误。如果不像第一个示例那样进行索引,那么执行此操作的正确方法是什么?

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

阅读 635
2 个回答

str % .. 接受 元组 作为右手操作数,因此您可以执行以下操作:

 >>> x = (1, 2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x + (y,))  # Building a tuple of `(1, 2, 'hello')`
'1,2,hello'

您的尝试应该在 Python 3 中工作,其中支持 Additional Unpacking Generalizations ,但在 Python 2.x 中不支持:

 >>> '%d,%d,%s' % (*x, y)
'1,2,hello'

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

也许看看 str.format()

 >>> x = (5,7)
>>> template = 'first: {}, second: {}'
>>> template.format(*x)
'first: 5, second: 7'

更新:

为了完整起见,我还包括 PEP 448 描述的 _额外解包概括_。 Python 3.5 引入了扩展语法,下面不再是语法错误:

 >>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {}'
>>> template.format(*x, y)  # valid in Python3.5+
'first: 5, second: 7, last: 42'

然而,在 Python 3.4 及以下 版本中,如果你想在解压的元组之后传递额外的参数,你可能最好将它们作为 命名参数 传递:

 >>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {last}'
>>> template.format(*x, last=y)
'first: 5, second: 7, last: 42'

这避免了需要构建一个在末尾包含一个额外元素的新元组。

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

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