函数的参数
函数的参数
1、参数的类型
函数的参数分为形参和实参
1、形参
定义函数时括号内声明的参数,本质是一个变量名,用来接收外部传来的参数
2、实参
调用函数时括号内传入的值,值可以是常量、变量、表达式或三种的组合
def index(a): # 形参:相当于变量名
print(a)
print(b)
if a > b:
print(a)
else:
print(b)
b = 2
a = 1
index(a) # 实参:相当于变量值
2、传参方式
1、位置参数 positional arguments
调用函数时通过位置传入的实参与形参一一对应
def index(a,b):
if a>b:
return a
else:
return b
index(1,3)# 按照位置顺序向形参中传参
2、关键字参数
1、调用函数时按照key=value形式指定实参可以不按顺序传参
2、关键字参数与位置参数混用时,位置参数一定要在前
3、并且不可以对同一个形参重复赋值
def res(a,b,c,d):
print(a,b,c,d)
res(1,2,d=3,c=4)#混用关键字参数与位置参数,位置参数在前,关键字参数在后指定参数传参
3、默认参数
在定义函数时已经为形参进行赋值,需要经常改变的参数定义成位置参数,很少改变的定义成默认参数
1、默认参数必须在位置参数之后
2、默认参数仅在定义阶段赋值一次
def res(a, b, c, d=5):
print(a, b, c, d)
d = 8# 在定义时已经被赋值一次,此处修改无效
res(1, 2, c=3)#默认参数可以在实参中不写直接调用
res(1, 2, c=3,d=8)# 如果修改默认参数在调用时修改
3、默认参数通常设为不可变类型
如果设置成可变类型,则每次调用都是在上次调用的基础上加值
def res(a, b, c, d=[]):
d.append(c)
print(a, b, c, d)
res(1, 2, c=3)
res(1, 2, c=3)
res(1, 2, c=3)
>>>
1 2 3 [3]
1 2 3 [3, 3]
1 2 3 [3, 3, 3]
可以修改如下:
# 第一种解决方案
def res(a, b, c, d=None):
if d == None:# 如果是None则定义一个空列表
d=[]
d.append(c)
print(a, b, c, d)
res(1, 2, c=3)
res(1, 2, c=4)
res(1, 2, c=5)
# 第二种解决方案
def res(a, b, c, d):
d.append(c)
print(a, b, c, d)
res(1, 2, 3,d=[])
res(1, 2, 4,[])
res(1, 2, 5,[])
4、可变长参数
调用函数时,实参的个数不固定,而实参传参有位置参数和关键字参数,所有有两种解决方案
1、位置参数*args,在定义阶段形参最后一个参数args前加个星号,可以接受所有实参中的溢出的位置参数,默认以元组的形式保存下来
-
官方认证为*args,但是只要有星号后面是什么参数都有可变长类型的效果
-
*是打散传入的容器类型,如果不打星号就默认转换溢出的参数形成元组
def res(a, b, c,*args):
print(a, b, c,args)
res(1, 2, 3,4,5,6,7,8)
>>>
1 2 3 (4, 5, 6, 7, 8)
def res(a, b, c,*args):
print(a, b, c,*args)# 将输入的参数本来转换成元组的,打散
res(1, 2, 3,4,5,6,7,8)
>>>
1 2 3 4 5 6 7 8
2、关键字参数**kwargs,在定义阶段最后一个形参用,将调用时所有溢出的关键字参数转换为字典{关键字:参数}赋值给形参
官方认证为**kwargs,但是只要有星号后面是什么参数都有可变长类型的效果
def res(a, b, c, **kwargs):# 将调用时溢出的关键字参数转换成字典
print(a, b, c, kwargs)
res(1, 2, 3, d=1, f=4, e=7)
>>>
1 2 3 {'d': 1, 'f': 4, 'e': 7}
def res(a, b, c, **kwargs):
print(a, b, c, *kwargs)# 一个*是打散字典拿到key值,打散字典只能是一个*
res(1, 2, 3, d=1, f=4, e=7)
>>>
1 2 3 d f e
5、命名关键字参数
1、在位置可变长参数和关键字可变长参之间
2、在调用阶段,一定要以关键字参数的形式传值
3、关键字参数一定要在位置参数后面
def index(a,b,c=1,*args,d,**kwargs):
print(a,b,c,args,d,kwargs)
index(1,2,3,4,5,6,d=2,f=4,g=8)
>>>
# 1 2 3 (4, 5, 6) 2 {'f': 4, 'g': 8}
6、组合使用
必须按照定义顺序:位置参数,关键字参数,*args,命名关键字参数,**kwargs
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!