Python函数的字典输入

2 投票
2 回答
13873 浏览
提问于 2025-04-16 11:47

我看到了一些代码,像下面这样:

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 个回答

2

这些被称为关键字参数,很多地方都有介绍,比如Python手册和一些博客文章

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,那么程序员可以指定一个字典,把输入参数的变量名(作为字符串)和它们的值对应起来。函数会处理剩下的事情,程序员就不用担心传递参数的顺序了。

希望这能帮到你。

撰写回答