Python函数的字典输入
我看到了一些代码,像下面这样:
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语言中的指针?它是用来以引用的方式输入字典吗?
如果你能回答我,我会很感谢你。
2 个回答
4
基本上,这段话的意思是:
如果不使用 **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
的值是 "Hello, World!"
。
上面的例子其实不太适合使用 **kw
,因为它只有一个输入参数。但如果你的函数有很多参数,那就不太合理去指望程序员能准确记住这些参数的顺序。
如果你和程序员都使用 **kw
,那么程序员可以指定一个字典,把输入参数的变量名(作为字符串)和它们的值对应起来。函数会处理剩下的事情,程序员就不用担心传递参数的顺序了。
希望这能帮到你。