[英]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.