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的形式为其传参
位置参数,关键字参数,命名关键字参数都存在情况下形参和实参的位置顺序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!