2017-03-19 43 views
0

對不起,這可能是一個愚蠢的問題,但我不太熟悉python。Suds客戶端在傳遞參數時不起作用,但與kwargs一起工作

在肥皂水客戶端,如果我將參數傳遞給使用該客戶端的方法調用:

kwargs = {'username': username, 'password': password, 'type': '', } 

response = client.service.Login(**kwargs) 

能正常工作。但如果我使用:

response = client.service.Login({'username': username, 'password': password, 'type': '', }) 

這是行不通的,有人可以請解釋一下這個區別以及它爲什麼不起作用。

感謝

回答

2

如果你仔細觀察,你可以看到,在第一種情況下它與**運營商傳遞給函數的參數,當你拆開詞典(您傳遞的關鍵,值對作爲命名參數)而在第二種情況下,您只是將函數傳遞給一個參數;字典

{'username': username, 'password': password, 'type': '', } 

如果你:

response = client.service.Login(**{'username': username, 'password': password, 'type': '', }) 

它應該工作

+0

感謝這麼**的允許打開包裝的字典嗎? – Sam

+0

準確。您可以使用單個*爲列表(對於未命名的參數)執行相同的操作。 –