zoukankan      html  css  js  c++  java
  • python 中*args 和 **kwargs

    简单的可以理解为python 中给函数传递的可变参数,args 是 列表的形式。kwargs 是 key,value的形式,也就是python 中的字典。

    *args 必须出现在**kwargs 的前边,否则会抛异常。

    1 def test(*args, **kwargs):
    2     print args
    3     print kwargs
    1 if __name__ == '__main__':
    2     print '---test 1---'
    3     test(1, 2, 3)
    4     print '---test 2---'
    5     test(a=1, b=2, c=3)
    6     print '---test 3---'
    7     data_list = [1, 2, 3]
    8     data_dict = {"a":1, "b":2, "c":3}
    9     test(*data_list, **data_dict)

    输出为:

    ---test 1---
    (1, 2, 3)
    {}
    ---test 2---
    ()
    {'a': 1, 'c': 3, 'b': 2}
    ---test 3---
    (1, 2, 3)
    {'a': 1, 'c': 3, 'b': 2}

    如果将**kwargs 写到了 *args 的前边的时候,程序会报错。

    def test2(**kwargs, *args):
        pass

    将会报出  

    def test2(**kwargs, *args):
                          ^
    SyntaxError: invalid syntax

    的异常来

    也可以将函数写成前边有固定想接受的参数,然后后边跟上可变参数,python默认会去自动做匹配。例如:

    1 def test3(a, b, *args, **kwargs):
    2     print 'a=', a
    3     print 'b=', b
    4     print 'args=', args
    5     print 'kwargs', kwargs

    测试代码及输出:

     1 print '---test3-1---'
     2 test3(a=1,b=2, c=3, d=4)
     3 print '---test3-2---'
     4 test3(1, 2, 3, c=4, d=5)
     5 
     6 
     7 ---test3-1---
     8 a= 1
     9 b= 2
    10 args= ()
    11 kwargs {'c': 3, 'd': 4}
    12 ---test3-2---
    13 a= 1
    14 b= 2
    15 args= (3,)
    16 kwargs {'c': 4, 'd': 5}
  • 相关阅读:
    内置对象
    Angular 动画
    Angular_上拉刷新
    angular Observable
    【Nginx】nginx为目录或网站加上密码认证
    MongoDB笔记
    websocket服务器+客户端
    cli 中php的配置和phpinfo不一样
    linux设置时区和自动同步时间
    crontab & php实现多进程思路
  • 原文地址:https://www.cnblogs.com/shanys/p/5886931.html
Copyright © 2011-2022 走看看