python中*args和**kwargs的区别

python中*args和**kwargs的区别

*args --表示所有参数的元组(tuple)
如:(1, 2, 3, 4)
**kwargs --表示传入的键值对(key = value),返回数据结果为字典(dict)
如;{‘a’: 1, ‘b’: 2, ‘c’: ‘e’, ‘d’: 5}

例一:

def func(test, *args, **kwargs):
    print("test = ", test)
    print("args = ", args)
    print("kwargs = ", kwargs)

func("testData")
print('-----------------------------------')
func( 1, 2, '3')
print('------------------------------------')
func("testData", 1, 2, '3', a=4, b="foo")

运行结果:

test =  testData
args =  ()
kwargs =  {}
-----------------------------------
test =  1
args =  (2, '3')
kwargs =  {}
------------------------------------
test =  testData
args =  (1, 2, '3')
kwargs =  {'a': 4, 'b': 'foo'}

例二:

def func(*args):
    print(args)
func()
func(12,'a','c',3)
func(12,'a','c',3,a=2,c=5,d='f')	#这种情况会报错,没有定义关键字参数**kwargs,报错信息见运行结果

运行结果:

()
(12, 'a', 'c', 3)
Traceback (most recent call last):
  File "E:/test/pylearning/argKwarg.py", line 34, in <module>
    func(12,'a','c',3,a=2,c=5,d='f')
TypeError: func() got an unexpected keyword argument 'a'

例三:

def func(**kwargs):
    print(kwargs)
func()
func(a=2,c=5,d='f')
func(12,'a','c',3,a=2,c=5,d='f')	#这种情况会报错,没有定义无名参数*args,报错信息见运行结果

运行结果:

{}
{'a': 2, 'c': 5, 'd': 'f'}
Traceback (most recent call last):
  File "E:/test/pylearning/argKwarg.py", line 33, in <module>
    func(12,'a','c',3,a=2,c=5,d='f')
TypeError: func() takes 0 positional arguments but 4 were given

说明:

  1. *args和**kwargs是python中的可变参数;
  2. *args表示的是无名参数,可任意数量,其结果组成是一个元组;
  3. **kwargs表示的是关键字参数,即每一个参数都是以键值对(key = value)的形式出现的,其结果组成是一个字典;
  4. 在定义参数时,*args和**kwargs可以不传参;
  5. args和**kwargs可以单独出现也可以一起出现,但一起出现的时候必须args在**kwargs之前。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值