3

我正在尝试了解 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)不起作用。

4

2 回答 2

6

*x将 的内容解包x到参数中,而不是元组;元组是%应该传递的。

print "%d %d %d %d" % tuple(x)
于 2012-07-19T13:39:14.377 回答
4

我建议在 Python 中使用格式化字符串的新方法。事实上,它更加优雅,并且完全符合您的期望:

"{} {} {} {}".format(*x)
于 2012-07-19T13:42:24.100 回答