python函数——形参中的:*args和**kwargs

多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现

*args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现)

示例:

1
2
3
4
5
def foo(x, * args):
     print (x)
     print (args)
 
foo( 1 , 2 , 3 , 4 , 5 ) #其中的2,3,4,5都给了args

执行结果是:

1
2
1
( 2 , 3 , 4 , 5 )

当args与位置参数和默认参数混用的情况下:(注意三者的顺序)

示例一、(三者顺序是:位置参数、默认参数、*args)

1
2
3
4
5
6
def foo(x,y = 1 , * args):
     print (x)
     print (y)
     print (args)
 
foo( 1 , 2 , 3 , 4 , 5 ) #其中的x为1,y=1的值被2重置了,3,4,5都给了args

 执行结果是:

1
2
3
1
2
( 3 , 4 , 5 )

 示例二、(三者顺序是:位置参数、*args、默认参数)

1
2
3
4
5
6
def foo(x, * args,y = 1 ):
     print (x)
     print (args)
     print (y)
 
foo( 1 , 2 , 3 , 4 , 5 ) #其中的x为1,2,3,4,5都给了args,y按照默认参数依旧为1

 执行结果是:

1
2
3
1
( 2 , 3 , 4 , 5 )
1

其中关于*,可以从2个角度来看(需要拆分来看):

1、从形参的角度来看:

示例:

1
2
3
def foo( * args): #其实这一操作相当于def foo(a,b,c,d,e):
     print (args)
foo( 1 , 2 , 3 , 4 , 5 ) #其中的1,2,3,4,5都按照位置传值分别传给了a,b,c,d,e

执行结果是:

1
( 1 , 2 , 3 , 4 , 5 )

2、从实参的角度来看:

示例:

1
2
3
4
5
6
def foo(x,y,z):
     print (x)
     print (y)
     print (z)
     
foo( * ( 1 , 2 , 3 )) #其中的*(1,2,3)拆开来看就是:foo(1,2,3),都按照位置传值分别传给了x,y,z

执行结果是:

1
2
3
1
2
3   

 

 

 

——————————————————————————————————————————————————————————————————————————————————————

 

 

 

 

**kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)

示例:

1
2
3
4
def foo(x, * * kwargs):
     print (x)
     print (kwargs)
foo( 1 ,y = 1 ,a = 2 ,b = 3 ,c = 4 ) #将y=1,a=2,b=3,c=4以字典的方式给了kwargs

执行结果是:

1
2
1
{ 'y' : 1 , 'a' : 2 , 'b' : 3 , 'c' : 4 }

关于**kwargs与位置参数、*args、默认参数混着用的问题:(注意顺序)

位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs,不然就会报错:

示例:

1
2
3
4
5
def foo(x, * args, * * kwargs):
     print (x)
     print (args)
     print (kwargs)
foo( 1 , 2 , 3 , 4 ,y = 1 ,a = 2 ,b = 3 ,c = 4 ) #将1传给了x,将2,3,4以元组方式传给了args,y=1,a=2,b=3,c=4以字典的方式给了kwargs

执行结果是:

1
2
3
1
( 2 , 3 , 4 )
{ 'y' : 1 , 'a' : 2 , 'b' : 3 , 'c' : 4 }

错误示例:(由于顺序错误)

1
2
3
4
5
def foo(x, * * kwargs, * args):
     print (x)
     print (args)
     print (kwargs)
foo( 1 ,y = 1 ,a = 2 ,b = 3 ,c = 4 , 2 , 3 , 4 )

执行结果就会报错:

1
SyntaxError: invalid syntax

位置参数、默认参数、**kwargs三者的顺序必须是位置参数、默认参数、**kwargs,不然就会报错:

示例:

1
2
3
4
5
def foo(x,y = 1 , * * kwargs):
     print (x)
     print (y)
     print (kwargs)
foo( 1 ,a = 2 ,b = 3 ,c = 4 ) #将1按照位置传值给x,y按照默认参数为1,a=2,b=3,c=4以字典的方式给了kwargs

执行结果是:

1
2
3
1
1
{ 'a' : 2 , 'b' : 3 , 'c' : 4 }

  

其中关于**,可以从2个角度来看(需要拆分来看):

1、从形参的角度来看:

示例:

1
2
3
def foo( * * kwargs): #其实就是相当于def foo(y,a,b,c)
     print (kwargs)
foo(y = 1 ,a = 2 ,b = 3 ,c = 4 )

执行结果是:

1
{ 'y' : 1 , 'a' : 2 , 'b' : 3 , 'c' : 4 }

2、从实参的角度来看:

示例一:

1
2
3
4
5
6
def foo(a,b,c,d):
     print (a)
     print (b)
     print (c)
     print (d)
foo( * * { "a" : 2 , "b" : 3 , "c" : 4 , "d" : 5 }) #**{"a":2,"b":3,"c":4,"d":5}是将字典里的每个值按照关键字传值的方式传给a,b,c,d

执行结果是:

1
2
3
4
2
3
4
5

示例二:

1
2
3
4
5
6
def foo(a,b,c,d = 1 ):
     print (a)
     print (b)
     print (c)
     print (d)
foo( * * { "a" : 2 , "b" : 3 , "c" : 4 }) #**{"a":2,"b":3,"c":4}是将字典里的每个值按照关键字传值的方式传给a,b,c;d依旧按照默认参数

执行结果是:

1
2
3
4
2
3
4
1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值