Python学习笔记(3): 什么是*args和**kwargs?

今天,在查一个方法的帮助文档时,我发现函数的入参是*args**kwargs,其中args是一些入参的元组,kwargs就不知道,google了一下,恍然大悟,kwargs就是传入的多个键值对key = value参数。


1. args,kwargs是什么?

例子:

def test(a, *args, **kwargs):
    print(a)
    print(args)
    print(kwargs)

test(1, 2, 3, d = '4', e = 5)

输出结果:

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

即1是参数a的值,元组(2, 3)是args的值,kwargs表示在args之后的多个键值对。再看一个例子:

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, 'b': 2, 'c': 3}
---------------------------------------
args =  (1, 2, 3, 4)
kwargs =  {'a': 1, 'b': 2, 'c': 3}
---------------------------------------
args =  ('a', 1, None)
kwargs =  {'a': 1, 'b': '2', 'c': 3}

可以看到,argskwargs是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(e = 3))
print(creat_dict(a = 1, b = 2, c = 3) == {'a':1, 'b':2, 'c':3})

输出结果如下:

{'e': 3}
True

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


3. 参考文章:

什么是*args和**kwargs?

Python中*args和**kwargs的使用

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值