Python函数,,Python-11@
Python函数,,Python-11@
Python-11
@(Python)
一、函数的返回值
1. 什么是返回值
返回值,是函数处理后的结果
2. 为什么要有返回值
如果需要在程序中拿到函数的处理结果,然后对这个结果进一步处理,就需要函数必须有返回值
3. 返回值的应用
函数的返回值由return定义:return 值return是一个函数结束的标志,函数内可以有多个return,但是只要执行一次return,整个函数就会结束运行return后面的返回值可以是任何数据类型return后面的返回值没有个数限制,如果有多个,可以使用逗号分隔开多个值return +0个值:返回None,如果函数中不写return,默认会在函数的最后一行添加return,返回Nonereturn +1个值:返回的值就是该值本身return +多个值:返回的值以元组形式呈现
二、函数调用的三种形式
def func(x,y): if x > y: return x else: return yfunc(1,2) # 直接传值res=func(3000,2000) * 12 # 调用函数的结果res=func(func(1000,2000),3000) # 把函数的结果(调用)当作参数
三、函数参数的分类
1. 函数定义阶段的参数
① 形参
在函数定义阶段,括号内定义的参数,称之为形式参数,简称形参,本质是变量名
② 位置形参
在函数定义阶段,按照从左到右的顺序依次定义的形参,称为位置形参特点:但凡是按照位置定义的形参,都必须被传值,并且不能多不能少,否则会报错
③ 默认参数(默认形参)
在函数定义阶段,就已经为形参赋值,也称为默认形参特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其传值(如果传值,会以传的值为准)def func(x,y=10)中的y=10就是默认参数
注意:
位置形参必须放在默认形参的前面默认形参的值在定义阶段已经赋值,即默认参数的值在函数定义阶段就已经固定(除非调用时专门传值)默认参数的值通常应该定义为不可变类型,避免耦合(解耦思想,单独使用不影响其他)有一部分,或大多数都一样,可以定义为默认形参,个别不同的再传值
2. 函数调用阶段的参数
① 实参
在函数调用阶段,括号内传入的值,称为实际参数,简称实参,本质就是变量的值
② 位置实参
在函数调用阶段,按照从左往右的顺序依次定义的实参,称为位置实参特点:按照对应的位置,给形参依次传值,严格受限于位置;实参就是给形参传值的
③ 关键字实参
在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参特点:不受位置的限制,仍然可以给指定的形参传值
位置实参和关键字实参可以混用
但是位置实参必须在关键实参的前面,否则会报错
并且关键字实参不能对一个形参重复赋值
3. 总结:
① 实参的应用场景:
根据需求,可以位置实参传值,也可以使用关键字传值
② 形参的应用场景:
当大多数情况不一样时,可以考虑将该参数定义成位置形参当大多数情况一样时,可以考虑将该参数定义成默认形参(即定义函数时就规定一个大多数都用的值)
4. 可变长参数
指的是在调用函数时,传入的参数个数可以不固定长度指的是参数的个数调用函数时,传值的方式有位置实参和关键字实参,对应形参也需要有两种解决方案,分别来接收溢出的位置实参*和关键字实参**
① 形参中*的使用
在函数定义阶段,形参中的*会将溢出的位置实参全部接收,存成元组的形式,然后把元组赋值给*后面的变量名z格式:def 函数名(x,y,*z):约定俗成,形参中的*变量名的写法统一为:*args一般应用于实参不固定的场景
比如:求出多个数的和,数字个数不固定,就可以用到
② 形参中**的使用
在函数的定义阶段,形参中的**会将溢出的关键字实参全部接收,以字典的形式存储,并赋值给**后面的变量名约定俗成,形参中的**变量名的写法统一为:**kwargs
③ 实参中*的使用
在函数调用阶段,*会将后面的值,进行for循环取出,形成位置实参(一个个值),因此,*后可以放能被for循环取出的数据类型格式:函数名(实参,*实参)但凡遇到实参中带*的,那么它就是位置实参,应该立马打散成位置实参看
④ 实参中**的使用
实参中使用**,这个参数必须为字典实参中的参数前面带**,**会将这个参数的值循环取出,拆成关键字实参但凡遇到实参中参数前面带**的,它就是关键字实参,应该将其拆分成关键字实参看
⑤ 实参中*和**的使用
⑥ 形参中和实参中*的综合使用
应用场景:*应对溢出
⑦ 形参中和实参中*和**的综合使用
如果想将函数的实参,原封不动的传给内部的函数,就需要使用*args和**kwargs这种原封不动的传值,要遵循index的规则传值方式才可以
def index(name,age,sex): print(‘Welcome %s:%s:%s to index page‘ %(name,age,sex))def wrapper(*args,**kwargs): index(*args,**kwargs) # *(1,2,3) **{‘a‘:4,‘b‘:5,‘c‘:6} 实参都会将这些打散 # index(1,2,3,a=4,b=5,c=6) 原封不动的将实参翻译过来, # 因此,wrapper的实参实际是传给index的wrapper(name=‘xut‘,age=18,sex=‘male‘)
5. 命名关键字形参(了解)
目的是让用户必须用关键字实参传值在函数定义阶段,*后面的参数都是命名关键字参数格式:定义函数时,def func(x,y,*args,后为命名关键字参数),注意,*args还是接收溢出的位置实参特点:在传值时,必须按照key=value的形式传,并且key必须命名关键字参数指定的参数名
最全参数使用,但是没有这种应用场景,z=1表示命名关键字默认参数,而不是默认参数
Python函数
评论关闭