簡體   English   中英

為什么* args不適用於字符串格式

[英]why *args doesn't work with string formatting

我試圖理解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)無效。

*x解包的內容x為自變量,而不是一個元組; 元組是應該傳遞的%

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

我建議使用Python中格式化字符串的新方法 實際上,它要優雅得多,並且完全符合您的期望:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM