目录
第六章 函数进阶
01 函数的多返回值
我们前面已经学习过了返回值的具体应用,那么如果当一个函数同时拥有两个return时,程序应该如何执行呢?
那么答案是:程序只会执行第一个return。原因是程序执行到return语句时,会直接退出当前的函数,导致return下方代码不执行,这也是我们前面学习过的知识了。
然而,生活是多样的。当我们一定需要同时返回两个值的时候,难道就没有解决办法了吗?答案是否定的,接下来就让我们学习当函数应用多个返回值时,应该如何解决。
当一个函数拥有多个返回值时,我们需要用逗号隔开,并且需要用与返回值数量相等的变量接收,同时这个方法也支持不同类型的数据return。
02 函数的多重传参方式
根据在使用方式上的不同,函数有四种常见参数使用方式:
1.位置参数
调用函数时根据函数定义的参数位置来传递参数。
表示为
#注意:传递的参数和定义的参数的顺序及个数必须一致。
2.关键字参数
指函数调用时通过"键 = 值"形式传递的参数。
作用:可以让函数更加清晰、容易使用,同时也清楚了参数的顺序需求。
#注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。
3.缺省参数
也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
#注意:所有位置参数必须出现在默认参数前,包括函数定义和调用。
作用:当调用函数时没有传递参数时,就会默认是使用缺省参数对应的值。
#注意:函数调用时,如果为缺省函数传值则会修改默认参数值,否则使用这个默认值。
4. 不定长参数
也叫做可变参数,,用于不确定调用的时候会传递多少个参数(甚至不传参)的场景。
作用:当调用函数时不确定参数个数时,可以使用不定长参数。
类型:1.位置传递(参数会作为元组的形式存在去接受不定长数量的参数传入)
#注意:传递的所有参数都会被args变量收集,他会根据传进参数的位置合并为一个元组(Tuple),args是元组类型,这就是位置传递。
2. 关键字传递(参数会作为字典的形式存在去接受不定长数量的参数传入)
#注意:参数是“键 = 值”形式的形式的情况下,所有的“键 = 值”都会被kwarges接受,同时会根据“键 = 值”组成字典。
03 匿名函数
函数作为参数传递
在前面的学习中,我们一直使用的函数,都是接收数据作为参数传入。例如:数字、字符串、字典、列表、元组等。但其实,我们学习的函数本身,也可以作为参数传入另一个函数内。
在传入数据的函数中,整个函数仅有数据不确定等待传入,而在函数作为参数进行传递时,函数的运算逻辑是整个被隐藏不显示的,仅有传入函数的数据进行显示,此时,就不是数据作为参数被传入函数,我们可以认为是函数的运行逻辑被传入。
在上述代码中,传入text_func函数中的就不是数据了,而是add函数当作参数传入,亦或者说,add函数的运算逻辑传入。
lambda匿名函数
函数的定义方式主要可以分为两种
1.def 关键字,可以去定义带有名称的函数,其函数可以基于函数名进行重复使用。
2.lambda 关键字,可以定义匿名函数(无名称),无名称,只可临时使用一次。
匿名函数定义基本语法:
lambda 传入参数 :函数体(一行代码)
其中,lambda是关键字,表示定义匿名函数;传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数;函数体,就是函数的执行逻辑,要注意,匿名函数中只能写一行代码,无法写入带多行代码。
使用场景:当只需要一行代码并且函数没有重复使用需求时,首选lambda定义法。
#注意:使用def和lambda定义的函数功能完全一致,两者唯一的区别只是lambda关键字定义的函数是匿名的,无法二次使用;而def定义的函数拥有名字,可以后续重复使用。