zoukankan      html  css  js  c++  java
  • Python tips: 什么是*args和**kwargs?

    转自:http://blog.csdn.net/yjk13703623757/article/details/76521420

    今天,在查一个方法的帮助文档时,我发现函数参数是*args与**kwargs。

    args是所有参数的数组,kwargs就不知道,google了一下,恍然大悟。kwargs就是传入的多个键值对key = value,运行结果为字典。

    1. *args,**kwargs是什么?

    例子:

    def test(a, *args, **kwargs):
        print(a)
        # print(b)
        # print(c)
        print(args)
        print(kwargs)
    
    test(1, 2, 3, d = '4', e = 5)

    输出结果:

    1
    (2, 3)
    {'e': 5, 'd': '4'}

    即1是参数a的值,数组(2, 3)是args的值,kwargs表示在args之后多个键值对。kwargs对参数位置不敏感。

    再看一个例子:

    def foo(*args, **kwargs):
        print('args = ', args)
        print('kwargs = ', kwargs)
        print('---------------------------------------')
    
    if __name__ == '__main__':
        foo(1, 2, 3, 4)
        foo(a = 1, b = 2, c = 3)
        foo(1, 2, 3, 4, a = 1, b = 2, c = 3)
        foo('a', 1, None, a = 1, b = '2', c = 3)

    输出结果如下:

    args =  (1, 2, 3, 4) 
    kwargs =  {} 
    --------------------------------------- 
    args =  () 
    kwargs =  {'a': 1, 'c': 3, 'b': 2} 
    --------------------------------------- 
    args =  (1, 2, 3, 4) 
    kwargs =  {'a': 1, 'c': 3, 'b': 2} 
    --------------------------------------- 
    args =  ('a', 1, None) 
    kwargs =  {'a': 1, 'c': 3, 'b': '2'} 
    ---------------------------------------

    可以看到,*args和**kwargs是python中的可变参数。

    *args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。

    同时使用*args和**kwargs时,*args参数必须在**kwargs前,像foo(a = 1, b = '2', c = 3, 'a', 1, None)这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”

    2. 定义创建字典的函数

    还有一个很漂亮的用法,就是定义创建字典的函数:

    def creat_dict(**kwargs):
        return kwargs
        print(creat_dict(a = 1, b = 2, c = 3) == {'a':1, 'b':2, 'c':3})
    
    creat_dict(e = 3)

    输出结果如下:

    {'e': 3}

    其实python带有类dict,可以使用dict(e = 3)创建一个字典。

  • 相关阅读:
    EXPDP fails with ORA-39126 Worker unexpected fatal error in KUPW$WORKER.FETCH_XML_OBJECTS (Doc ID 2656308.1)
    github+maven+jenkins(spring boot项目自动化发布)
    Compose部署Fabric-explorer
    Compose部署IPFS星际文件系统以及sdk的使用
    Git常用命令以及常见问题解决
    Chrome 卡顿优化
    The "Go" Learning Trip -- 2. Go Basics -- Part2
    The "Go" Learning Trip -- 1. Hello Go, Frist “go” Code -- Part1
    Go语言 踩坑录(报错锦集)
    WEB开发基础(CSS篇)
  • 原文地址:https://www.cnblogs.com/Ivyli4258/p/8179731.html
Copyright © 2011-2022 走看看