我正在尝试理解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)
不起作用。
答案 0 :(得分:6)
*x
将x
的内容解包为参数,而不是元组;而元组是%
应该传递的。
print "%d %d %d %d" % tuple(x)
答案 1 :(得分:4)
我建议使用the new way of formatting strings in Python。事实上,它更优雅,完全符合您的预期:
"{} {} {} {}".format(*x)