关于python函数的可变参数和关键词参数

x = ('a','b','c','d')
y = {'a':1,'b':2,'c':3}
def func(a, b, args, c=0, **kw):
    print a
    print b
    print args
    print 'c =', c
    print kw

func(1,2,x,3,**y)

上面这种情况才会出现以下提示:TypeError: func() got multiple values for keyword argument 'a'因为**y入参相当于会把y拆分为 a=1, b=2, c=3,由于前面定义时已经有一个变量名字同样叫a,所以才会提示多重赋值的提示

若是这种情况:

x = ('a','b','c','d')
y = {'a':1,'b':2,'c':3}
def func(a, b, args, c=0, *kw):
    print a
    print b
    print args
    print 'c =', c
    print kw

func(1,2,x,3,*y)

输出如下:

1
2
('a', 'b', 'c', 'd')
c = 3
('a', 'c', 'b')

也很好理解,*kw表示接受可变参数,也就是元组,可是因为y是个dict而不是tuple,所以在调用func时,*y相当于只把y中的索引传了进去。因此,最后的kw输出是('a', 'c', 'b'),然而顺序为什么是acb而不是abc我也没搞懂。。

还有一种情况:

x = ('a','b','c','d')
y = {'a':1,'b':2,'c':3}
def func(a, b, args, c=0, *kw):
    print a
    print b
    print args
    print 'c =', c
    print kw

func(1,2,x,3, **y)

错误提示如下:TypeError: func() got multiple values for keyword argument 'a'一样的,func接收可变个参数,然而**y这种入参形式就是错误的,*kw可以接受tuple类型输入,**y相当于输入是个dict,所以就算把y的索引改为d,e,f也依然会提示错误:

TypeError: func() got an unexpected keyword argument 'e'

总之呢,函数定义**y就是接收dict类型参数,*y是接收tuple类型参数,对于dict类型变量,可以用**x当做dict类型参数传入函数,而tuple类型可用*x。

接触python不深,还是大学汪,不知道以上理解对不对,请各位不吝指正。

参考网址:http://t.cn/8kUYJqN

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值