【Python】*args 和 **kwargs

【Python】*args 和 **kwargs

*args

允许事先没有确定函数需要传递的参数个数
表示将实参中按照位置传值,多出来的值都赋给args,并且以元组的方式呈现

def foo(x, *args):
    print x
    print args
foo(1,2,3,4,5)

程序输出:

1
(2, 3, 4, 5)

当args与位置参数和默认参数混用时:

位置参数:x
默认参数:y=1

  • 三者顺序:位置参数、默认参数、*args
def foo(x, y=1, *args):
    print x
    print y
    print args
foo(1,2,3,4,5)

程序输出:

1
2
(3, 4, 5)

关于*:

  • 从形参的角度
    (1, 2, 3, 4, 5)被当做元组传送给args
def foo(*args):
    print args
foo(1,2,3,4,5)

程序输出:

(1, 2, 3, 4, 5)
  • 从实参的角度
    *(1,2,3,4,5)指代*args
def foo(a,b,c,d,e):
    print a
    print b
    print c
    print d
    print e
foo(*(1,2,3,4,5))

程序输出:

1
2
3
4
5

**kwargs

允许没有事先定义参数名
按照关键字传值把多余的传值以字典的方式呈现

def foo(x, **kwargs):
    print x
    print kwargs
foo(1, a=1, b=2, c=3)

程序输出:

1
{'a': 1, 'c': 3, 'b': 2}

当**kwargs与位置参数、*args默认参数混用时:

  • **kwargs、位置参数、*args三者位置顺序必须为:位置参数、*args、**kwargs
def foo(x, *args, **kwargs):
    print x
    print args
    print kwargs
foo(1, 2,3,4,a=1, b=2, c=3)

1传给位置参数x
2,3,4作为元组传递给*args
a=1, b=2, c=3作为字典传递给**kwargs
程序输出:

1
(2, 3, 4)
{'a': 1, 'c': 3, 'b': 2}
  • **kwargs、位置参数、默认参数三者的位置顺序必须为:位置参数、默认参数、**kwargs
def foo(x, y=1, **kwargs):
    print x
    print y
    print kwargs
foo(1,a=1, b=2, c=3)

程序输出:

1
1
{'a': 1, 'c': 3, 'b': 2}

关于**

  • 从形参角度
    相当于foo(a,b,c)
def foo(**kwargs):
    print kwargs
foo(a=1, b=2, c=3)

程序输出:

{'a': 1, 'c': 3, 'b': 2}
  • 从实参角度
    将字典里的每个值按照关键字传值的方式传给a,b,c
def foo(a,b,c):
    print a
    print b
    print c
foo (**{"a":1,"b":2,"c":3})

程序输出:

1
2
3

总结

无论是作为形参还是实参
* + 元组
** + 字典

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值