有时将 kwargs 传递给接收 args 的函数会很方便。
例如:
def login( user, password ):
...
def write_message( author, to_user, msg ):
...
def http_response( action, params ):
return globals()[ action ]( **params )
# client calls
# http_response( 'login', { 'user': "sergzach", 'password': "PASS123" } )
在此示意图示例中,我们从客户端接收信息并调用其名称等于在params中传递的变量 action 的函数。如果我们的客户知道协议{必要'关键字'参数,例如用户,密码用于登录()和作者,to_user,msg 用于< strong> write_message()}然后我们的pythonic代码可以简短,优雅和安全。
是特殊(记录)还是随机功能?
答案 0 :(得分:2)
Python区分参数和参数。
参数是您在函数定义中列出的内容:
def foo(bar, baz=default, **quux):
pass
参数是您调用它时传递给函数的内容:
result = foo(bar, baz, **quux)
鉴于上述函数定义,Python允许任何这些调用:
foo(bar, baz, quux1=quux1, quux2=quux2)
foo(*(bar, baz), quux1=quux1, quux2=quux2)
foo(**{'bar': bar, 'baz': baz, 'quux1': quux1, 'quux2':quux2})
他们都完全合法并且做同样的事情。也就是说,它们都传递相同的论点。
答案 1 :(得分:1)
您的示例保证可以在python中运行。在python中,您始终可以选择将命名参数作为关键字参数传递。
正如评论中已经指出的那样,这种方法可能不安全(通过用户提供的名称调用函数)。因此,如果这样做,请格外小心(评论中还包括一些好的安全建议)。
除此之外,我不确定我明白你的意思是&#34;随机功能&#34;?.. ..