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

if __name__ == "__main__":
    settings = {
        "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E="
    }

    application = tornado.web.Application(
    [(r'/', MainHandler)], **settings)

   

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

阅读 5.3k
4 个回答

方法本身接受的不是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)你就明白了

找本书深入看看python语法吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题