Python函数中的可变长参数(*args,**kwargs)

1、形参中含有*
*形参名:用来接收溢出的位置实参,溢出的位置实参会被*保存成元组的格式然后赋值给紧跟后面的形参名
    *后面跟的可以是任意名字,但是约定俗称只能是args
def func(a,b,*c):
  print(a)
  print(b)
  print(c)
func(1,2,3,4,5,6,7)

 

2、形参中含有**

**形参名:用来接收溢出的关键字实参,溢出的位置实参会被**保存成字典的格式然后赋值给紧跟后面的形参名
    **后面跟的可以是任意名字,但是约定俗称只能是kwargs
def func(a,b,**c):
  print(a)
  print(b)
  print(c)
func(1,2,q=1,w=2)

 

3、实参中带*

*可以用于实参中,实参中带*,先*后的值打散成位置实参
def func(a,b,c):
  print("a:{} b:{} c:{}".format(a,b,c))
func(*[1,2,3])
//相当于func(1,2,3)

 

4、形参中与实参中全部带*

def func(a,b,*l):         //相当于func(1,2,(3,4,5,6,7,8))
  print(a)
  print(b)
  print(l)
func(1,2,*[3,4,5,6,7,8])    //相当于func(1,2,3,4,5,6,7,8)
 
 
5、实参中带**
**用在实参中,**后面只能是字典,实参中带**,先**后的值打散成位置实参
def func(x,y,z):
  print(x,y,z)
  dicts1 = {"x":1,"y":2,'z':3}
func(*dicts1)      //相当于for循环遍历dicts1  func("x","y","z")
func(**dicts1)    //相当于x=1,y=2,z=3

 

6、形参实参中带**

def func(a,b,**kwargs):          //kwargs={'x': '11', 'y': '22'}
  print(a)                          //1
  print(b)                          //1
  print(kwargs)                  //{'x': '11', 'y': '22'}

dic1 = {"b":"1","a":"1","x":"11","y":"22"}
func(**dic1)                         //func(b="1",a="1",x="11",y="22")
 
7、args和kwargs混用
7.1

以下为各种实参的传递的组合形式
def demo(*args,**kwargs):
  print(args)
  print(kwargs)

a = [1,2,3,4]
g = {"i":"i1"}
demo(1)    //(1,) {}
demo(a=2)  //() {'a': 2}
demo(1,a=2)    //(1,){'a': 2}
demo(*a)        //(1, 2, 3, 4) {}
demo(**g)       //(){'i': 'i1'}

 

 

 7.2

 

8、命名关键字参数,

*后面的参数,如下述,为命名关键字参数。且传参时按照key=value的形式为其传参

 位置参数,关键字参数,命名关键字参数都存在情况下形参和实参的位置顺序

 

 

 

 

 

 

 

 

 

 

 

 

posted @   moon_p  阅读(405)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示