python中的args和kwargs_ipython和python区别

python中的args和kwargs_ipython和python区别python中arg,*arg,**kwarg区别1.*args(*的作用很重要)首先要搞清楚*的意思和作用,有助于理解arg,*arg,**kwarg

python中的args和kwargs_ipython和python区别"

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是把字典的键值拆成单个的,依次赋值给函数形参。

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

今天的文章python中的args和kwargs_ipython和python区别分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/64367.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注