python中函数的字典输入

python中函数的字典输入,python,Python,我看到一些代码,如下面的代码: params = { 'username': username, 'password': password, 'attended': attended, 'openid_identifier': openid_identifier, 'multistage': (stage and True) or None } ret = authmethod.login(request, userobj, **params) 登录是这

我看到一些代码,如下面的代码:

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')
所以我们知道kw是一本字典,但我不知道它的
**
意思,它是不是类似于C语言中的指针?它是用来输入字典作为参考的


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

这些被称为关键字参数,它们在很多地方都有描述,比如和中。

基本上这就是它的意思:

如果不使用
**kw
,您需要在其签名中列出
登录
的所有输入参数

现在,您正在调用
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
的输入参数的值将是
“你好,世界!“

上面的示例不是使用
**kw
的最佳位置,因为只有一个输入参数。但是如果您有一个具有长签名的函数,那么期望任何程序员准确地记住必须以何种顺序向该函数传递哪些参数是不合理的

如果(您和)程序员要使用
**kw
,那么程序员可以指定一个字典,将输入参数的变量名(作为字符串)映射到它们的值。函数负责其余部分,程序员不必关心他将参数传递给函数的顺序


希望这有帮助

只是一个提示:对于Python的关键字参数,它更像是C的
,可能是