2016-01-27 51 views
0

在我的練習中,我必須使用**kwargs以字母順序打印在我的函數中輸入的參數。使用函數** kwargs

這裏是我現在:

def afficher(**kwargs): 
if kwargs is not None: 
    for i in kwargs: 
     print (i) 

afficher(helpme=7,plz=10) 

回報:

plz 
helpme 

我擔心的是:

  • 我想他們按字母順序排列
  • 返回

    我想讓他們返回爲:

    helpme = 7

    PLZ = 10個

提前感謝!

回答

0

普通字典沒有排序,因爲它們的密鑰被散列並最終相應地存儲。

在你的情況,你可以掃描kwargs字典的排序鍵

for i in sorted(kwargs): 

所以代碼變得

def afficher(**kwargs): 
    for i in sorted(kwargs): 
     print ('{}={}'.format(i,kwargs[i])) 

afficher(helpme=7,plz=10) 

總是產生

helpme=7 
plz=10 

注意:你可以看,我已經刪除了if,我假設你插入了chec k如果有任何關鍵字參數傳遞給函數。 在這種情況下,kwargs將是一個空字典{},而不是None,所以不需要阻止迭代。

0

當您有**something作爲函數參數時,函數體something內部將是一個dict,它將關鍵字映射到它們的值。

遍歷排序的鑰匙,你會怎麼做:

def afficher(**kwargs): 
    for k,v in sorted(kwargs.items()): 
     print '{}={}'.format(k,v) 

注意,當沒有關鍵字參數傳遞,kwargs={}kwards.items()=[]for循環將立即退出,因此沒有理由檢查它。此外,您不會使用if kwargs is None檢查它,因爲{}不是None。你可以用{}進行檢查。

+0

我相信我以前見過類似的答案..;)關鍵字參數的打包說明非常模糊和不正確。另外,請注意,「空白」不是「無」。 – Pynchia

+0

是的,我們的答案几乎在同一時間發佈(或者我可能會在幾分鐘內打開標籤)。我更喜歡遍歷'.items()',這就是爲什麼我沒有刪除我的答案。我編輯了一些措辭來解決您的評論。 –

+0

沒問題,我只是指出了一些事情,讓你更好地闡述這個問題 – Pynchia

相關問題