2016-09-21 91 views
5

我只是很好奇**kwargs。我剛開始學習它,因此,雖然通過在計算器和視頻教程所有的問題要我注意到我們可以這樣做有沒有什麼辦法在Python中打印** kwargs

def print_dict(**kwargs): 
    print(kwargs) 
print_dict(x=1,y=2,z=3) 

其中給出的輸出爲:{'y': 2, 'x': 1, 'z': 3} 所以我的數字,爲什麼沒有做反向和打印類似x=1,y=2,z=3

所以,我想這一點:

mydict = {'x':1,'y':2,'z':3} 
print(**mydict) 

但我得到了一個錯誤,如:TypeError: 'z' is an invalid keyword argument for this function(有時它顯示「Y」是一個無效的關鍵字)。

我也嘗試喜歡它賦值給變量,然後打印出來,但我再次得到一個錯誤(SyntaxError: invalid syntax):

mydict = {'x':1,'y':2,'z':3} 
var = **mydict 
print(var) 

看到這是工作:

def print_dict(**this): 
    print(this) 
mydict = {'x':1,'y':2,'z':3} 
print_dict(**mydict) 

但是,相反的print(this)如果我這樣做print(**this)它給出了錯誤。

我們可以打印*arg我試試這個代碼:

def num(*tuple_num): 
    print(tuple_num) 
    print(*tuple_num) 
num(1,2,3,4) 

它完美地運行,並給出了輸出爲:

(1, 2, 3, 4) 
1 2 3 4 

所以我想知道是否有任何可能的解決方案/辦法打印**kwargs

回答

9

語法callable(**dictionary),如果你使用的不同的關鍵字參數適用字典。

所以,你的例子:

mydict = {'x':1,'y':2,'z':3} 
print(**mydict) 

在內部翻譯爲:

print(x=1, y=2, z=3) 

,其確切的順序取決於當前的隨機哈希種子。由於print()不支持這些關鍵字參數,因此調用失敗。

其他print()調用成功,因爲你們中的值傳遞作爲單獨位置參數:

tuple_num = (1, 2, 3, 4) 
print(*tuple_num) 

實際上是相同的:

print(1, 2, 3, 4) 

print()功能支持獨立的參數通過將它們逐個寫出來,其間的值爲sep(默認情況下爲空格)。

**dictionary在調用之外是無效的語法。由於callable(**dictionary)是調用語法的一部分,而不是對象,因此沒有任何可打印的內容

最多,你可以格式字典看起來像電話:

print(', '.join(['{}={!r}'.format(k, v) for k, v in mydict.items()])) 
+0

照亮答案,那就是。 – Nevertheless

4

你必須建立自己的格式的詞典(沒有別的是**kwargs):

print(','.join('{0}={1!r}'.format(k,v) for k,v in this.items())) 
相關問題