一、什么是函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
二、定义函数
def 函数名(参数1,参数2,参数3,……): """注释""" 函数体 return 返回的值
三、函数的调用
1、调用函数
函数的调用:函数名加括号
1、先找到名字
2、根据名字调用代码
2、函数返回值
什么时候该有返回值
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值,通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要返回值
调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值,通常无参函数不需要有返回值
四、函数的参数
形参
1、位置参数必须传值
def mymax(x,y): the_max=x if x > y else y return the_max maxnum=mymax()#调用函数时不传参数 print(maxnum) 报错:TypeError: mymax() missing 2 required positional arguments: 'x' and 'y' 类型错误,mymax()缺少两个必须的位置参数x和y
2、默认参数(若不传递,会显示设置的默认值)
def stu_info(name,sex='男'): print(name,sex) stu_info('alex')#alex 男 stu_info('eva','女')#eva 女
实参
参数排放顺序:位置参数-->*args-->默认参数-->**kwargs
1、按位置传参
def mysum(x,y): return x+y num=mysum(10,20) print(num)#30
2、按关键字传参
def mymax(x,y): the_max=x if x > y else y return the_max maxsum=mymax(y=10,x=20)#关键字传参 print(maxsum)#20
3、混合传参 关键字参数永远在位置参数后面
def mymax(x,y): the_max=x if x > y else y return the_max maxnum=mymax(10,y=20) print(maxnum)#20
动态传参
动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收
args是元组形式,接收除去键值对以外的所有参数
kwargs接收的只是键值对的参数,并保存在字典中
1、*args接收不定长的所有位置参数
args可以接收不确定个数的参数
def func(*args): print(args,type(args)) func(1,2,'alex')#(1, 2, 'alex') <class 'tuple'>
若将*args放在最前边,它会接收全部参数,a,b就没有对应的实参了
def func(*args,a,b): print(a) print(b) print(args,type(args)) func(1,2,'alex',3,4) # TypeError: func() missing 2 required keyword-only arguments: 'a' and 'b' # func()缺少两个必须的关键字参数a和b
有默认参数的时候,要放在*args后边
def func(a,b,*args,sex='男'): print(a) print(b) print(args,type(args)) print(sex) func(1,2,'alex','wusir','ritian') """ 1 2 ('alex', 'wusir', 'ritian') <class 'tuple'> 男 """
2、**kwargs接收所有的关键字参数
接收关键字参数
def func(**kwargs): print(kwargs) func(a=1,b=4,c=3)#{'a': 1, 'b': 4, 'c': 3}
位置参数、*args、默认参数、**kwargs
def func(a,*args,sex='男',**kwargs): print(a) print(sex) print(args) print(kwargs) func(1,'alex','wusir','ritian',sex='女',name='taibai',age=21) """ 1 女 ('alex', 'wusir', 'ritian') {'name': 'taibai', 'age': 21} """
万能参数
def func(*args,**kwargs): print(args) print(kwargs) func(1,name='alex') """ (1,) {'name': 'alex'} """