2011-02-14 30 views
0

功能字典輸入我有看到一些這樣的代碼波紋管:的蟒蛇

params = { 
    'username': username, 
    'password': password, 
    'attended': attended, 
    'openid_identifier': openid_identifier, 
    'multistage': (stage and True) or None 
} 
ret = authmethod.login(request, userobj, **params) 

登錄實現這樣

def login(self,request,user_obj,**kw): 
    username = kw.get('username') 
    password = kw.get('password') 

,所以我們知道千瓦是一本字典,但我不知道**的含義,是否像C語言中的指針一樣?是用來輸入字典作爲參考。

謝謝你,如果你能回答我。

+0

只是一個提示:它更類似於C的``或'`爲Python的關鍵字參數... – hvr 2011-02-14 07:50:20

回答

2

基本上這是什麼意思:

不使用**kw,你需要列出所有的輸入參數,它的簽名login

現在,您正在調用login函數,並且您知道變量名稱login的參數是。所以如果你有很多參數,就很難永遠記住參數的順序。

因此,您可以通過命名參數的變量名稱並將它們設置爲等於您要傳遞它的值來調用參數login。想想看這樣的:

不使用**kw,你可以這樣做:

def say(phrase): 
    print phrase 

say("Hello, World!") 

但是,通過使用**kw,你可以這樣做:

def say(**kw): 
    phrase = kw.get('say_what') 
    print phrase 

say(**{'say_what':"Hello, World!"}) 

現在發生的事情是,使用**「以這樣的方式解開字典,即它告訴say它所期望的作爲名稱爲say_what的輸入參數將具有值"Hello, World!"

上述示例不是使用**kw的最佳位置,因爲只有一個輸入參數。但是如果你有一個簽名長的函數,那麼期望程序員準確地記住必須以什麼順序傳遞這個函數的參數是不合理的。

如果(你和)程序員使用**kw,那麼程序員可以指定一個字典,將輸入參數的變量名稱(字符串)映射到它們的值。該函數將其餘的工作和程序員不必在他傳遞參數給函數的爲了關心自己

希望這有助於