2011-02-14 78 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,那么程序员可以指定一个字典,将输入参数的变量名称(字符串)映射到它们的值。该函数将其余的工作和程序员不必在他传递参数给函数的为了关心自己

希望这有助于