【Python—参数】*arg与**kwargs参数的用法

解包和压包

将元祖、列表、字典、字符串、生成器等整体中的每个元素当成个体剥离出来,这个过程就是解包,反过来即为压包。

用于函数定义时

在python中,*arg与**kwargs用于函数定义时,均为可变参数,*arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict。

def func(*args,**kwargs):
    print(type(args))
    print(args)
    print(type(kwargs))
    print(kwargs)

if __name__ == '__main__':
    func(1,2,3,4,a=5,b=6,c=7)

'''
输出结果:
<class 'tuple'>
(1, 2, 3, 4)
<class 'dict'>
{'a': 5, 'b': 6, 'c': 7}
'''

总结:在python中,当*和**符号出现在函数定义的参数中时,用于动态传参,是一个压包的过程。

  • *arg表示任意多个无名参数,类型为tuple
  • **kwargs表示关键字参数,为dict

使用时需将*arg放在**kwargs之前,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误。

用于函数调用时

反过来,如果*和**语法出现在函数调用中又会如何呢?
*和**都会起到解包传参的作用。我们在调用函数时能够使用*语法,在这种情况下,它与函数定义的意思相反,他会解包参数,而不是压包。

def func(a, b, c, d):
    print(a, b, c, d)


if __name__ == '__main__':
    test1 = (1, 2, 3, 4)
    test2 = [1, 2, 3, 4]
    test3 = {1, 2, 3, 4}
    test4 = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    func(*test1)
    func(*test2)
    func(*test3)
    func(**test4)
'''
输出结果:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
'''  

总结:在函数调用时,*和**用于解包参数的集合。

  • *会以单个元素的形式解包序列(如元组、列表、集合),使其成为独立的参数。
  • **会以键值对的形式解包字典,使其成为独立的关键字参数。

扩展:菜鸟教程-zip() 函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值