python函数——形参中的:*args和**kwargs
多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现
*args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现)
示例:
def foo(x, *args): print(x) print(args) foo(1, 2, 3, 4, 5) #其中的2,3,4,5都给了args
执行结果:
1
(2, 3, 4, 5)
当args与位置参数和默认参数混用的情况下:(注意三者的顺序)
示例一、(三者顺序是:位置参数、默认参数、*args)
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, 4, 5)
示例二、(三者顺序是:位置参数、*args、默认参数)
ef 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, 4, 5) 1
其中关于*,可以从2个角度来看(需要拆分来看):
1、从形参的角度来看:
示例:
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, 2, 3, 4, 5)
2、从实参的角度来看:
示例:
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
**kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)
示例:
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, 3, 4) {'y': 1, 'a': 2, 'b': 3, 'c': 4}
错误示例:(由于顺序错误)
ef foo(x,**kwargs,*args): print(x) print(args) print(kwargs) foo(1,y=1,a=2,b=3,c=4,2,3,4)
执行结果就会报错:
SyntaxError: invalid syntax
位置参数、默认参数、**kwargs三者的顺序必须是位置参数、默认参数、**kwargs,不然就会报错:
示例:
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 1 {'a': 2, 'b': 3, 'c': 4}
其中关于**,可以从2个角度来看(需要拆分来看):
1、从形参的角度来看:
示例:
def foo(**kwargs):#其实就是相当于def foo(y,a,b,c) print(kwargs) foo(y=1,a=2,b=3,c=4)
执行结果是:
{'y': 1, 'a': 2, 'b': 3, 'c': 4}
2、从实参的角度来看:
示例一:
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
执行结果是
2 3 4 5
示例二:
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依旧按照默认参数
执行结果是:
2 3 4 1
分类:
Python 开发之路
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现