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

d.p*_*tto 3 python python-2.7

我试图理解Python*args和**kwargs操作.让我们考虑一个带有4个参数的函数.我们可以使用*x将list 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
Run Code Online (Sandbox Code Playgroud)

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

小智 6

*xx参数的内容解包为参数,而不是元组; %应该通过一个元组.

print "%d %d %d %d" % tuple(x)
Run Code Online (Sandbox Code Playgroud)