为什么* args不适用于字符串格式

时间:2012-07-19 13:35:27

标签: python python-2.7

我正在尝试理解Python * args和** kwargs的操作。让我们考虑一个带有4个参数的函数。我们可以使用* x

将列表x作为参数传递给函数
def foo(a,b,c,d):
    print a,b,c,d

x=[1,2,3,4]

foo(x)
#TypeError: foo() takes exactly 4 arguments (1 given)

foo(*x)
#1 2 3 4 # works fine

print "%d %d %d %d" %(*x)
#SyntaxError: invalid syntax

如果我弄错了,以防foo()* x解包值...那么为什么print "%d %d %d %d" %(*x)的情况下出错?
注意 - 我对如何在一行中打印列表感兴趣,但只是好奇为什么print "%d %d %d %d" %(*x)不起作用。

2 个答案:

答案 0 :(得分:6)

*xx的内容解包为参数,而不是元组;而元组是%应该传递的。

print "%d %d %d %d" % tuple(x)

答案 1 :(得分:4)

我建议使用the new way of formatting strings in Python。事实上,它更优雅,完全符合您的预期:

"{} {} {} {}".format(*x)