2012-05-27 179 views
0

如果我聲明一個帶有非關鍵字參數的函數,如元組和關鍵字參數(如字典),它們是否被聲明?一個帶有非關鍵字參數和關鍵字參數的函數

例如:

def someFunc(a, *nkw, **kwa): 
    nkwList = [] 
    kwList = [] 
    for i in nkw: 
     nkwList.append(i) 
    for j in kwa: 
     kwList.append(j) 
    print a, nkwList, kwList 

輸入:

someFunc(1) 

輸出:

1 [] [] 

正如你所看到的,即使我沒有通過一個元組和字典,我當我通過nkw和kwa循環時,沒有得到Index超出範圍的錯誤。根據我的理解,我認爲* nkw和** kwa是在函數聲明中創建的。

任何人都可以幫助我理解這個概念嗎?

+2

請注意'* nkw'和'** kwa'通常被稱爲'* args'和** ** kwargs' – second

回答

1

元組和字典是總是創建,即使它們是空的(即沒有任何通過它們)。

+0

感謝您的回覆。 – user907629

1

nkwkwa當然作爲emty列表/字典傳遞。做別的事情會完全違揹他們的目的,因爲你永遠無法安全地訪問它們,你不需要檢查它們是否存在。

您可能會將此與默認參數混淆。例如:

def someFunc(x=[]): 
    pass 

這裏作爲默認x名單上實例函數的聲明,一個therfore是對函數的所有調用相同。

+0

感謝您的回答。我的問題不是關於傳遞一個空的列表或字典,或者我的問題不是關於與他們做什麼或訪問他們。爲了澄清,函數聲明中使用的參數是否被創建。請參閱@Ignacio Vazquez-Abrams的答案。你會明白的。 – user907629

相關問題