参数分形参、实参
形参:函数定义时括号内的参数
实参:函数调用时括号内的参数
1、位置参数:指调用的参数个数和顺序必须与定义的参数个数和顺序一致。
示例:
def happy_birthday(name,age): #name、age形参
print('祝'+name+'生日快乐')
print(str(age)+'岁生日快乐')
#正确的调用方式
happy_birthday('娟子姐',18) #'娟子姐'、18实参
#错误的调用方式
#happy_birthday('娟子姐') #程序报错:参数数量不一致
#happy_birthday(18,'娟子姐') #程序报错:参数顺序不一致
2、关键字参数:是函数调用时,使用“形参名称=值”的方式进行传参,传递参数顺序可以与定义时参数的顺序不同。
示例:
def happy_birthday(name,age):
print('祝'+name+'生日快乐')
print(str(age)+'岁生日快乐')
#关键字传参正确调用方式
happy_birthday(age=18,name='娟子姐')
happy_birthday('娟子姐',age=18) #正常执行,位置传参在前,关键字传参在后
#错误调用方式
#happy_birthday(age=18,name1='娟子姐') #程序报错:形参名称出错
#happy_birthday(name='陈美美',18) #程序报错:位置传参和关键字传参同时存在时,位置传参在前,关键字传参在后
3、默认值参数:是函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值。
示例:
def happy_birthday(name='娟子姐',age=18):
print('祝'+name+'生日快乐')
print(str(age)+'岁生日快乐')
happy_birthday() #不传参数,采用默认值参数,输出:祝娟子姐生日快乐、18岁生日快乐
happy_birthday('陈梅梅') #位置传参,age采用默认值参数。输出:祝陈梅梅生日快乐、18岁生日快乐
happy_birthday(age=19) #关键字传参,name采用默认值,输出:祝娟子姐生日快乐、18岁生日快乐
#happy_birthday(19) #程序报错,如果使用位置传参的方式,19被传给了name
4、可变参数:又分为个数可变的位置参数和个数可变的关键字参数两种,其中个数可变的位置参数是在参数前加一颗星(*para) , para形式参数的名称,函数调用时可接收任意个数的实际参数,并放到一个元组中。个数可变的关键字参数是在参数前加两颗星(**para),在函数调用时可接收任意多个“参数=值”形式的参数,并放到一个字典中。
示例:
#个数可变的位置参数
def fun(*para):
print(type(para))
for item in para:
print(item)
#调用
fun(10,20,30,40)
fun(10)
fun(20,30)
fun([11,22,33,44]) #实际上传递的是一个参数(一个列表)
#在调用时,参数前面加一颗星,可分别将列表进行解包
fun(*[11,22,33,44,55])
#字数可变的关键字参数
def fun2(**kwpara):
print(type(kwpara))
for key,value in kwpara.items():
print(key,'-----',value)
#调用
fun2(name='娟子姐',age=19,height=170) #关键字参数
d={'name':'娟子姐','age':18,'height':170}
#fun2(d) #TypeError: fun2() takes 0 positional arguments but 1 was given
fun2(**d) #系列解包操作