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

    一.介绍

    1.*args和**kwargs这两个对于函数来说是可变参数

    2.*args返回的是一个元祖

    3.**kwargs返回的是一个字典

    二.演示

    说明:对于以下函数,*args可以识别非a=1这种关键字参数以外的所有参数;**kwargs只能识别a=1这种关键字参数,其他的都不识别

    def add(*args, **kwargs):     #*args和**kwargs是打包过程
        print(args, kwargs)
    
    
    add(1, 2, 3, 4, a=1, b=2)
    add(1)
    add(a=1, b=2)
    add(1, {"a": 1})
    add("1", [1, 2], {"a": 1}, (1, 2))
    add(*[1, 2], **{"a": 1})

    结果:

    (1, 2, 3, 4) {'a': 1, 'b': 2}
    (1,) {}
    () {'a': 1, 'b': 2}
    (1, {'a': 1}) {}
    ('1', [1, 2], {'a': 1}, (1, 2)) {}

    (1, 2) {'a': 1}

    结论:

    1.很明显只有a=1,b=2这种的**kwargs才能识别到,要不然就返回空字典;对于非a=1,b=2这种的*args才能识别到,要不然返回一个空的元祖。

    2.但是对于add(*[1, 2], **{"a": 1})这种情况呢,结果为啥是(1, 2) {'a': 1},而不是([1,2],{"a":1})呢,那是因为当你在*(1,2)前面加个*号那么就相当于把它拆成1,2两个数字了,然后传给了*args了,那对于**{"a":1}前面加个两个*号那么就相当于把它拆成a=1了,然后传给了**kwargs,所以最后结果就是(1, 2) {'a': 1}。这也就是拆包的过程。

  • 相关阅读:
    %2d
    将块中的文字设置成属性,即实现块中文字可拖动的功能
    获得块参照的插入点方法
    排序
    将几个实体对象变成一个块
    对克隆实体的类型转换
    对实体的克隆
    递归-顺序输出任意正整数各位
    递归-汉诺塔
    递归-最大公约数
  • 原文地址:https://www.cnblogs.com/hao2018/p/11537395.html
Copyright © 2011-2022 走看看