python中arg,*arg,**kwarg区别
1. *args(*的作用
很重要)
首先要搞清楚*的意思和作用,有助于理解arg,*arg,**kwarg。
(*是arg的前半部分,arg是后半部分)
- 打包参数(pack)
- 拆分参数(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()将被拆分的字典的键值依次赋值给相同名称的形参(必须一一对应)。
·同样的:
- kwargs也只是一个常用的参数表示方法,可以更换但不建议。
**
的作用:打包参数pack
&拆分参数unpack
·*args
和**kwargs
区别:
- 打包:
*args
是把多个位置参数打包成元组tuple,**kwargs
是把多个关键字参数打包成字典dict。 - 拆分:
*args
是把打包了的参数拆分成单个的,依次赋值给函数形参,**kwargs
是把字典的键值拆成单个的,依次赋值给函数形参。
python中arg,*arg,**kwarg区别
今天的文章python中的args和kwargs_ipython和python区别分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/64367.html