tornado中传递参数时的**settings是什么意思。

if __name__ == "__main__":

    settings = {

        "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E="

    }


    application = tornado.web.Application(

    [(r'/', MainHandler)], **settings)

代码省略了一部分,就是想问传递实参参数时的**settings是什么意思,传递一个字典为什么要加上两个** ?

PIPIONE
浏览 1044回答 2
2回答

30秒到达战场

方法本身接受的不是dict,所以在一个dict前面加上 ** 意思是向方法传入参数:cookie_secret=bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=例如,有dict A = {'name': 'zhangsan', 'age': 18}方法def test(name, age):     pass则可以如此调用:test(**A),此时key会做为参数的名称同理,如果是一个list,例如:B = ['zhangsan', 18]可以使用 test(*B) 来传入参数,参数的值按位置来确定;这个参数与上面的A参数效果是一致的================================分割线====================================有的时候,我们需要在函数定义(而非像上面在函数调用)时使用这种特性;此时,我们可以这样来定义函数:def test_dict(**dict):     pass这个方法我们可以传入多个参数,但是这多个参数会变成一个dict例如,我们可以这样使用:test_dict(name='zhangsan', age=18)那么方法内部我们可以使用参数dict,它的值是{'name': 'zhangsan', 'age': 18}同理:def test_list(*list):     pass这个方法我们也可以传入多个参数,例如 test_list('zhangsan', 18)则我们可以得到list的值为['zhangsan', 18]

眼眸繁星

查一下 (*args, **kwargs)你就明白了
打开App,查看更多内容
随时随地看视频慕课网APP