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)?? の場合にエラーが発生するのでしょうか。
注-リストを1行で印刷する方法には興味がありませんが、なぜ機能しprint "%d %d %d %d" %(*x)ないのか興味があります。

4

2 に答える 2

6

*xxタプルではなく、の内容を引数にアンパックします。タプルは%渡されるべきものです。

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

Pythonで文字列をフォーマットする新しい方法を使用することをお勧めします。実際、それははるかにエレガントであり、あなたが期待することを正確に実行します:

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