为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PIPIONE 2018-10-15 14:30:59
if __name__ == "__main__":    settings = {        "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E="    }    application = tornado.web.Application(    [(r'/', MainHandler)], **settings)代码省略了一部分,就是想问传递实参参数时的**settings是什么意思,传递一个字典为什么要加上两个** ?
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

方法本身接受的不是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]


查看完整回答
反对 回复 2018-10-28
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

查一下 (*args, **kwargs)你就明白了

查看完整回答
反对 回复 2018-10-28
  • 2 回答
  • 0 关注
  • 1043 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信