一、形参与实参介绍
【形参】:在定义函数阶段定义的参数称之为形式参数,简称形参,相当于变量名
def func(x, y): # x=1,y=2
print(x, y)
【实参】:在调用函数阶段传入的值称之为实际参数,简称实参,相当于变量值
func(1,2)
【形参与实参的关系】:
1、在调用阶段,实参(变量值)会绑定给形参(变量名)
2、这种绑定关系只能在函数体内使用
3、实参与形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系
实参是传入的值,但值可以是以下形式
形式一:
func(1,2)
形式二:
a=1
b=2
func(a,b)
形式三:
func(int('1'),2)
func(func1(1,2,),func2(2,3),333)
二、形参与实参的具体使用
2.1 位置形参与位置实参介绍
【位置参数】:按照从左到右的顺序依次定义的参数称之为位置参数,包括位置形参和位置实参
【位置形参】:在函数定义阶段,按照从左到右的顺序直接定义的“变量名”
【特点】:必须被传值,多一个不行少一个也不行
'''错误案例示范'''
def func(x,y):
print(x,y)
func(1,2,3) # TypeError: func() takes 2 positional arguments but 3 were given
func(1,) # TypeError: func() missing 1 required positional argument: 'y'
【位置实参】:在函数调用阶段, 按照从左到有的顺序依次传入的“值”
【特点】:按照顺序与形参一一对应
def func(x, y):
print(x, y)
func(1, 2) # 结果: 1 2
func(2, 1) # 结果: 2 1
2.2 关键字参数
【关键字实参】:在函数调用阶段,按照key=value的形式传入的值
【特点】:指名道姓给某个形参传值,可以完全不参照顺序
'''通过明确指定参数名的方式来传递参数值'''
def func(x,y):
print(x,y)
func(y=2,x=1) # 结果:1 2
func(1,2) # 结果:1 2
2.3 混合使用(强调)
1、位置实参必须放在关键字实参前
def func(x,y):
print(x,y)
func(1,y=2) # 结果:1 2
func(y=2,1) #结果:SyntaxError: positional argument follows keyword argument
#位置实参跟在了关键字实参后面导致错误
2、不能为同一个形参重复传值
def func(x,y):
print(x,y)
func(1,y=2,x=3) # TypeError: func() got multiple values for argument 'x'
func(1,2,x=3,y=4) # TypeError: func() got multiple values for argument 'x'
2.4 默认参数
【默认形参】:在定义函数阶段,就已经被赋值的形参,称之为默认参数
【特点】:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值
'''默认参数是指在函数定义时,为参数指定的一个默认值。如果在函数调用时没有为这些参数提供值,则自动使用这些默认值。'''
def func(x,y=3):
print(x,y)
func(x=1) # 1 3
func(x=1,y=44444) # 1 44444
2.5 总结:位置形参、位置实参、关键字参数和默认参数的区别
请注意,这里的“可省略性”是指调用函数时是否可以省略某些参数。对于位置形参和位置实参来说,它们通常是成对出现的,即调用时必须为每一个位置形参提供一个位置实参(除非形参有默认值)。然而,在提到“可省略性”时,我们更多是在考虑函数定义中的默认参数和函数调用时是否使用了关键字参数来跳过某些参数。
另外,“*args”是Python中的一个特殊语法,用于在函数调用时接收任意数量的位置实参,并将它们作为一个元组传递给函数。这里只是为了说明位置实参的灵活性而提及,并不直接属于位置形参、位置实参、关键字参数或默认参数的范畴。