2011-07-08 32 views
2

車參數我有一個函數:行爲傳遞

def greeter(name, greeting, punc): 
    print greeting+', '+name+punc 

我有一個帶參數的字典:

params={'name':'Mark','greeting':'How are you','punc':'?'} 

當我調用該函數爲greeter(**params),我得到預期的輸出How are you, Mark?。但是當我打電話像這樣greeter(*params),我得到輸出name, puncgreeting。看起來像params的密鑰列表已被傳遞給greeter。這裏究竟發生了什麼?

只是好奇。

回答

5

貌似從PARAMS密鑰列表已傳遞到招待員。這裏究竟發生了什麼?

這確實是發生了什麼,或多或少。

*x預計x是一個可迭代的,並遍歷它,將結果逐個解釋爲參數。默認情況下,迭代一個字典,迭代其密鑰。 (例如,您可以使用greeter(*(params.items()))來獲取名稱/值對,但字典仍然未排序,因此迭代順序將不可靠。)

2

就像迭代字典時產生鍵一樣,在這種方式下在位置擴展中使用它也是如此。

print list(params)