函数的参数

24677d79356d821343ce375ea2bfb568.png  

def test(x,y,z):
pass

位置参数,必须一一对应,多一个少一个都不行
test(1,2,3)

关键字参数,无需一一对应,多一个少一个都不行
test(y=2,x=1,z=3)

```
位置参数必须在关键字参数左边
一个形参只能给它传一次,不能被赋予多个值
test(1,y=2,3)报错
test(1,3,y=2)报错
test(1,3,z=2)
test(1,3,z=2,y=4报错)
test(z=2,1,3)报错
```

```
参数组
*args除了关键字参数、**字典,其他都可以传 如x=1,**{x:1}无法接收,
而*[1,2,3] ,*{x:1}可以传 什么都不传也行
def test(x,*args):
print(args)
情况1
a=test(1,[1,2,{"args":[4,5,6]}],(1,2,3))
>>>([1,2,{"args":[4,5,6]}],(1,2,3))

会把第一个当位置参数传给x,后面不管有几个参数,都传给args,而且args整体是一个元组,后面有几个参数,这个元组就有几个参数
```

```
情况2
a=test(1,*[1,2,{"args":[4,5,6]}])
>>>(1,2,{"args":[4,5,6]})

传参数时 在一个列表参数前加 * 代表,这一部分传进去后,变成元组的多个参数,而不是把整体当做元组的第一个参数
```

```
情况3
a=test(1,*{"q":2})
a=test(1,*{"q":2,"a":3})
>>>('q',)
>>>('q','a')

传*字典的时候,args接收的是key , 传的时候不加*,则把整个字典当做元组的第一个参数
```

```
**kwargs只能接收关键字参数 如x=1,和**字典,如**{"a":1},不能接收字典,必须加**!
**kwargs什么都不传也行
def test(**kwargs):
print(args)
test(x=1)
test(**{"a":1})
test({"a":1})报错!

```
总结:
```python
def fun(x, y=1, *args, **kwargs):
print(x)
print(y)
print(args)
print(kwargs)
fun(1,2,3,4,5,6,[7,8,9],xx=3,**{"yy":3})
>>>
1
2
(3, 4, 5, 6, [7, 8, 9])
{'xx': 3, 'yy': 3}

#形参:
参数必须按照顺序传 :普通参数,默认参数,*参数,**参数
普通参数必须一一对应,且必须传
默认参数,*参数,**参数 可以不传
默认参数:传了就覆盖 位置可以不一一对应
*参数:除了关键字参数、**字典,其他都可以传
**参数 :只能接收关键字参数 和**字典

```

实参:普通参数必须一一对应,且必须传

posted @ 2019-08-14 18:43  坚持fighting  阅读(116)  评论(0编辑  收藏  举报