python中arg,*arg,**kwarg区别

python中arg,*arg,**kwarg区别


1. *args*的作用很重要)

首先要搞清楚*的意思和作用,有助于理解arg,*arg,**kwarg。
(*是arg的前半部分,arg是后半部分)

  1. 打包参数(pack)
  2. 拆分参数(unpark)

  • example 01:
def foo(*number):
    for i in number:
        print(i)
    print(type(number))

foo(1, 2, 3, 4, 5)

1
2
3
4
5
<class ‘tuple’>

在example01中 foo函数 将1,2,3,4,5, 5个参数打包成元组(tuple) (1, 2, 3, 4, 5)给了形参number。


  • example02:
def foo(a, *number):
    print('a:', a)
    print('number:', number)
    for i in number:
        print(i)
    print(type(number))

foo(1, 2, 3, 4, 5)

a: 1
number (2, 3, 4, 5)
2
3
4
5
<class ‘tuple’>

number接收到的实参变成了元组(2, 3, 4, 5),第一个参数1被形参a接收成功。


  • example03:
def foo(a, b, *number, c):
    print('a:', a)
    print('b:', b)
    print('c:', c)
    print('number:', number)
    for i in number:
        print(i)
    print(type(number))

foo(1, 2, 3, 4, 5)

Traceback (most recent call last):
File “C:/Users/PycharmProjects/untitled10/test19.py”, line 11, in
foo(1, 2, 3, 4, 5)
TypeError: foo() missing 1 required keyword-only argument: ‘c’

报错是因为形参c没有接收到实参,因为*的作用是:按照顺序接打包后面所有的实参成为一个元组,所以实参5也会被打包进元组(3, 4, 5),就没有留给形参c的实参了。

·注意:args只是一个通常使用的形参写法,换成其他的也ok(不建议更换)

  • example04:
def bar(a,b,c):
    print(a,b,c)

bar(*[1,2,3])

1 2 3

在example04中*没有出现在函数定义中,而是在函数调用中。
*在这里的作用:把打包了的实参(tuple或list)拆分unpack成单个的数值,依次赋值给函数的形参。
———————————————————————————————————————————————————————————

2. **kwargs

  • **kwargs也是由两部分组成:
  • **kwargs (**要重点理解)

  • example05:
def bar(**number):
    print(number)

bar(a=1, b=2, c=3)

{‘a’: 1, ‘b’: 2, ‘c’: 3}

在example05中bar()函数将实参(a=1, b=2, c=3)打包成字典(Dict)格式传递给形参number。


  • example06:
def bar(a, b, c):
    print(a,b,c)

bar(**{'a': 1, 'b': 2, 'c': 3})

1 2 3

在example06中bar()将被拆分的字典的键值依次赋值给相同名称的形参(必须一一对应)


·同样的:
  1. kwargs也只是一个常用的参数表示方法,可以更换但不建议。
  2. **的作用:打包参数pack&拆分参数unpack
·*args**kwargs区别:
  1. 打包: *args是把多个位置参数打包成元组tuple**kwargs是把多个关键字参数打包成字典dict
  2. 拆分: *args是把打包了的参数拆分成单个的,依次赋值给函数形参,**kwargs是把字典的键值拆成单个的,依次赋值给函数形参。

https://blog.csdn.net/lllxxq141592654/article/details/81288741

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值