python函数的参数
1、形参和实参
函数的参数分为形式参数和实际参数:形式参数:形式参数是在定义函数时在函数括号中申明的参数,简称形参,相当于变量名。实际参数:实际参数是在调用函数时传入的值,简称实参,相当于变量值。’形参和实参的关系:
在调用阶段,实参(变量值)会绑定给形参(变量名)。
这种绑定关系只能在函数体内使用。
实参与形参的绑定关系在函数调用时生效,函数调用结束后解除绑定关系。
形参的形式:
位置参数
默认参数
可变长位置参数
可变长默认参数
命名关键字参数
实参的形式:
位置参数
默认参数
2、实参
2.1 位置实参
位置实参:在函数调用阶段, 按照从左到右的顺序依次传入的值。
特点:按照顺序与形参一一对应。
def func(x,y,z):
pass
func(1,2,3)
# 1,2,3这种形式位置实参。
2.2、关键字实参
关键字实参:在函数调用阶段,按照key=value的形式传入的值。
特点:指名道姓给某个形参传值,可以完全不参照顺序。
def func(x,y,z):
pass
func(x=1,y=2,z=3)
func(y=1,x=2,z=3)
# x=1,y=2,z=3这种形式关键字实参。
# y=1,x=2,z=3这种形式关键字实参。
3、形参
3.1 位置形参
位置参数:按照从左到右的顺序依次定义的参数称之为位置参数。
位置形参:在函数定义阶段,按照从左到右的顺序直接定义的"变量名。
特点:必须被传值,多一个不行少一个也不行```
def func(x,y,z): # x,y,z是位置形参
c = x + y + z
return c
num = func(1,2,3) # 位置实参传参
print(num) # 6
num1 = func(x=1,z=3,y=2) # 关键字实参传参
print(num1) # 6
3.2 默认形参
默认形参:在定义函数阶段,就已经被赋值的形参,称之为默认参数。
特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值。
注:默认形参虽然在函数定义阶段就指定了一个值,但是默认值尽量不用可变类型数据,如:列表,字典等。这个是约定成俗,不是硬性要求。
def func(x=5): # x=5是默认形参
c = 1 +x
return c
num = func() # 不传任何实参
print(num) # 6
num1 = func(10) # 位置实参传参
print(num1) # 11
num1 = func(x=10) # 关键字实参传参
print(num1) # 11
# 当默认参数需要用可变类型数据时
def func(x,y,l=None):
if l is None:
l = []
l.append(x)
l.append(y)
return l
lis1 = func(1,2)
print(lis1) # [1, 2]
lis2 = func(4,5,[9,1])
print(lis2) # [9, 1, 4, 5]
3.3 可变长度的位置参数’*’
形参名:用来接收溢出的位置实参,溢出的位置实参会被*保存成元组的格式然后赋值紧跟其后的形参名
*后跟的可以是任意名字,但是约定俗成应该是args
# n个数相加
def func(x,y,*args):
sum = x + y
for i in args:
sum += i
return sum
sum1 = func(1,2)
print(sum1) # 3
sum2 = func(1,2,5,6,3,2)
print(sum2) # 19
3.4 可变长度的关键字参数’**’
**形参名:用来接收溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参名
**后跟的可以是任意名字,但是约定俗成应该是kwargs
# 返回一个字典
def func(dic=None,**kwargs):
if dic is None:
dic = {}
dic.update(kwargs)
return dic
dic1 = func(x=1,y=2,z=3)
print(dic1) # {'x': 1, 'y': 2, 'z': 3}
dic = {'name':"gsf",'age':18}
dic2 = func(dic,sex="男",height=168,kg=54)
print(dic2) # {'name': 'gsf', 'age': 18, 'sex': '男', 'height': 168, 'kg': 54}
3.5 命名关键字参数
命名关键字参数:在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数
特点:命名关键字实参必须按照key=value的形式为其传值
def func(x,y,*,a,b):
return x + y + a + b
sum1 = func(1,2,a=1,b=2)
print(sum1) # 6
3.6 形参的组合使用
组合使用是将位置参数、默认参数、可变长参数等的混合使用
# 位置参数必须在默认参数前面
def func(x,y=1):
return x+y
sum1 = func(1)
print(sum1) # 2
# 可变长位置参数必须在位置参数和默认参数之前
def func(x,y=2,*args):
return x+y+sum(args)
sum2 = func(1,2,3,4,5,6)
print(sum2) # 21
# 命名关键字参数必须在位置参数、默认参数之前、可变长位置参
def func(x,y=2,*args,a,b):
return x+y+sum(args)+a+b
sum3 = func(1,2,3,4,5,6,7,a=8,b=9)
print(sum3) # 45
# 可变长默认参数必须在位置参数、默认参数之前、可变长位置参数、命名关键字参数
def func(x,y=2,*args,**kwargs):
sums = x + y + sum(args)
for k,v in kwargs.items():
sums += kwargs[k]
return sums
sum4 = func(1,2,3,4,5,6,7,a=8,b=9)
print(sum4) # 45
def func(x,y=2,*args,a,**kwargs):
sums = x + y + sum(args) + a
for k,v in kwargs.items():
sums += kwargs[k]
return sums
sum3 = func(1,2,3,4,5,6,a=7,b=8,c=9)