Python 3 - 在str.format()中使用元组

12

我想使用str.format()方法,但是当我的值存储在元组中时遇到了一些困难。例如,如果我这样做:

s = "x{}y{}z{}"
s.format(1,2,3)

然后我得到了'x1y2z3' - 没有问题。
但是,当我尝试:

s = "x{}y{}z{}"
tup = (1,2,3)
s.format(tup)

我理解

IndexError: tuple index out of range.
那么我怎样才能将元组“转换”为单独的变量?或者有其他的解决方法吗?

您实际上正在传递一个名为“元组”的单个参数。 - Vishnu Upadhyay
def fun(*args): print('我的参数:{!a}'.format(args))我还不知道'a'的含义,但它似乎是一个“转换说明符”。我也看到过使用'r'的情况。 - eltbus
2个回答

31

使用*arg可变参数调用语法来传入元组:

s = "x{}y{}z{}"
tup = (1,2,3)
s.format(*tup)
*tup之前告诉Python将元组解包为单独的参数,就好像你调用了s.format(tup[0], tup[1], tup[2])一样。
或者你可以索引第一个位置参数:
s = "x{0[0]}y{0[1]}z{0[2]}"
tup = (1,2,3)
s.format(tup)

示例:

>>> tup = (1,2,3)
>>> s = "x{}y{}z{}"
>>> s.format(*tup)
'x1y2z3'
>>> s = "x{0[0]}y{0[1]}z{0[2]}"
>>> s.format(tup)
'x1y2z3'

谢谢!它起作用了,但你能解释一下 * 到底是什么意思吗?或者可以指引我到文档的正确位置吗? - soungalo
如果在 map() 中使用,而又不想定义 lambda 或自定义函数以使用 * 解压元组,则此方法非常有用!这是我能找到的唯一讨论索引格式解压元组的解决方案。干杯! - Tim

-3

您可以解包元组的内容。

s=s.format(*t)


1
这似乎没有增加任何现有答案中未涵盖的内容。 - Kevin
@Kevin - 那就给它点个踩呗,不要举报。 - ArtOfWarfare
shorter is better - Sean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接