在python中函数参数的定义方式有一下4中方式。
1)位置参数
2)关键字参数:
3)默认参数:
4)可变参数(*args,**kwargs):
1.位置参数
在我们在传参的时候,实参传递的顺序按照形参定义的顺序进行传递的传参方式。
def sum_num(num1,num2):
print(num1+num2)
sum_num(1,2) #num1=1,num2=2
2、关键字参数:
我们在传参的时候,以形参等于实参的形式,忽略形参定义的顺序进行传参的方式
注意事项:
1、关键字只能是形参中声明过的才能使用
2、位置参数和关键字参数混用,必须位置参数在前,关键字参数在后,才能正常使用
一、关键字参数:
def sum_num(num1,num2):
print(num1)
print(num2)
print(num1+num2)
sum_num(num1=10,num2=20)
sum_num(num2=10,num1=20) #num1=20.num2=20
二、关键字参数和位置参数混用
def sum_num(num1,num2):
print(num1)
print(num2)
print(num1+num2)
sum_num(10,num2=20) #num1=10,num2=20
位置参数在前,关键字参数在后,程序能正常运行,否则程序将报错。
三、默认参数:
默认参数
在定义函数的形参的时候,可以给形参一个初始值(默认值),
这种参数就叫做默认参数。当调用函数的时候,如果不给默认参数,
赋值,函数就会使用默认值。如果给默认函数参数赋值,函数就
使用重新赋的值
注意事项:
1、默认参数一定要写到形参的后面,否则将报错。
def save_userinfo(name, age, gender='男'):
print('姓名:{},年龄:{},性别:{}'.format(name, age, gender))
save_userinfo('王兵',20)
# 调用函数的时候,没有给函数参数‘gender’传值,因此使用默认值
save_userinfo('花',20,gender='女')
# gender='女'覆盖掉了原有的gender='男'
运行结果:
姓名:王兵,年龄:20,性别:男
姓名:花,年龄:20,性别:女
四、可变参数:
可变参数:
如果函数中的参数过多,我们定义起来非常麻烦,
使用起来也非常麻烦,因此pyhon给我们提供了可变参数类型 ,
能处理比当初时更多的参数,会将传入的参数变成元组
可变参数格式:
*变量名
可接受多个位置参数,
注意事项:
1、 args位置参数会被组织成一个元组类型
2、一般情况下,还用的变量名称叫做args---->*args
3、*具有将序列打散的功能
*args----->接受多个位置参数
**kwargs---->接受多个关键字参数。变量名称可以随意写
,但是一般使用kwargs,
注意事项:
关键字参数将被组织成字典类型的数据
1、* args 类型参数
def func(*aa):
print(aa) #(1,2,3,4,5,6,7)
print(aa[0],aa[1])
func(1,2,3,4,5,6,7) #可以传递任意多个实参,以元组形式返回。
def func1(*args):
print(args)
print(args[0],args[1])
func1(1,2,3,4)
运行结果:
(1, 2, 3, 4, 5, 6, 7)
1 2
(1, 2, 3, 4)
1 2
打散功能:
tup=(1,2,3,4)
print(tup) # (1,2,3,4)
print(*tup) #1,2,3,4
list=['a','b','c']
print(*list) #a,b,c
str1='hello'
print(*str1) # h e l l o
#将元组中的123分别给a,b,c赋值
def func(a,b,c):
print(a,b,c) #1 2 3
tup=(1,2,3)
func(*tup) #打散后将元祖中每个值分别给a,b,c
#通过打散功能传递位置函数
2、**kwargs 类型参数:
def func(**kwargs):
print(kwargs) #返回字典类型的数据
# {'name': 'zs', 'age': 10, 'gender': '男'}
print(kwargs['name'],kwargs['age'],kwargs['gender'])
func(name='zs',age=10,gender='男')
** 可将字典打散(拆包)
def func(name,age):
print(name,age) # zs 10
dic={'name':'zs','age':10}
func(**dic) # 等价于 name='zs',age=10
参数的顺序:
函数参数总结:
定义函数时参数的顺序: 位置参数,元组参数,默认参数,字典参数。
创建函数声明参数时的顺序:
位置参数>*args>默认参数>**kwargs
def func(a,*args,b=10,**kwargs):
print(a)
print(args)
print(b)
print(kwargs)
func('zs','ww',b='23',c=30,d=40)
运行结果:
zs
('ww',)
23
{'c': 30, 'd': 40}
def func(*arga,**kwargs):
pass
# 此种函数参数什么类型都能加收