Python函数中*args和**kwargs

前情提要

函数

  • 使用函数时,记得要写函数后面的冒号
  • 传参数时注意要与形参格式相同个数也想同,当形参赋为固定值时可以传进个数不同的参数
  • 但你不确定你要输入多少个时可以用“ *形参名 ”或者“ **形参名 ”(这个是传进去键值对)
  • 当有多个输出值时,有相应个元素接收就可以

实参

分为两种:
1、位置参数,必须一一对应,缺一不行多一也不行
2、关键词参数,无需一一对应,缺一不行多一也不行

def test(x,y,z):
    print(x)
    print(y)
    print(z)
print("位置参数")
test(1,2,3)
print("关键词参数")
test(y=1,x=3,z=4)

结果:

位置参数
1
2
3
关键词参数
3
1
4

函数中的*args **kwargs有什么区别?

1、*args是列表 **kwargs是字典
2、def test(x,*args **kwargs)的位置是固定的

举例:
注:
args以元组的方式去存储,
1、当你写一个功能的时候,为后期留下可扩展性。
2、在你调用的时候你不确定到底传几个值

1、

def test(x,*args):
    print(x)
    print(args)
    print(args[0])
test(1,2,3,4,5)

结果:

1
(2, 3, 4, 5)
2

2、传的值只要是按位置参数的方式给形参传值,多余的都会按照一个整体的列表形式存储

test(1,{'name':'alex','age':18})
test(1,['x','y','z'])

结果:

1
({'name': 'alex', 'age': 18},)
{'name': 'alex', 'age': 18}
1
(['x', 'y', 'z'],)
['x', 'y', 'z']

3、想以2,3,4,5的形式把x,y,z传进去

test(1,*['x','y','z'])

结果:

1
('x', 'y', 'z')
x

4、以关键字的方式传,会出现错误
原因:*args 处理的只是位置参数,把未知参数处理成列表的形式

test(1,y=2,z=3)

结果:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-1ad824fe3d24> in <module>()
      1 #以关键字的方式传
----> 2 test(1,y=2,z=3)

TypeError: test() got an unexpected keyword argument 'y'

5、若想要传关键词参数时,要用到**kwargs

def test1(x,**kwargs):
    print(x)
    print(kwargs)
test1(1,y=2,z=3)

结果:

1
{'y': 2, 'z': 3}

6、位置参数必须在关键词参数的左边

test1(1,y=2,z=3,1,2)

结果:

  File "<ipython-input-10-fa987fd6f2fc>", line 2
    test1(1,y=2,z=3,1,2)
                   ^
SyntaxError: positional argument follows keyword argument

7、注意个数

test1(1,2,1,2,y=2)

结果:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-16-a164592a7fac> in <module>()
----> 1 test1(1,2,1,2,y=2)

TypeError: test1() takes 1 positional argument but 4 were given

8、一个参数不能传两遍

test1(1,y=2,z=3,z=2)

结果:

  File "<ipython-input-17-060e23d5720f>", line 2
    test1(1,y=2,z=3,z=2)
                    ^
SyntaxError: invalid character in identifier

9、def test(x,args **kwargs)的位置是固定的
原因:
<1>这种形式本身就不允许,因为
args接收的是位置参数,
<2>而位置参数不可以出现在关键词参数的右侧

def test3(x,**kwargs,*args):
    print(x)
    print(kwargs)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值