李丹 陕西工业职业技术学院 信息工程学院
关键字:Python 匿名函数 应用
在Python中,当需要定义一个功能简单且只有一个表达式时,可以省去函数命名的过程,而将此函数定义为匿名函数,同时也可以避免定义函数的过程中存在函数名重复的问题。本文讨论匿名函数的定义与调用,举例说明其应用。
(1)匿名函数的定义
匿名函数,顾明思议就是没有名字的函数,即不需要通过关键字def定义的函数。Python中,定义匿名函数使用关键字lambda,其一般格式为:
其中,冒号后面表达式的值作为匿名函数的返回值。
注:①参数列表中的参数可以是多个,并且参数之间用逗号进行分隔;
②表达式只能是一个表达式,即只能有一个返回值。
(2)匿名函数的调用
匿名函数一般不能直接使用,而是需要将其赋给一个变量,通过变量名(实参列表)来调用匿名函数。
注:实参列表中参数之间用逗号进行分隔,依次和参数列表中的参数从左往右一一对应。
例1:通过定义函数求10与2之差。
方法1:定义匿名函数实现,代码如下:
方法2:通过def定义函数实现,代码如下:
在Pycharm中运行这两个程序,最终结果都是8
从此例子中可以看出:对于同一问题,匿名函数比def定义的函数代码量少,更简单且更易理解。
(3)匿名函数和一般函数的区别
与通过def定义的函数相比,匿名函数有以下不同之处:
①匿名函数没有函数名,但是def定义的函数有函数名;
②匿名函数中只能有一个表达式,但是def定义的函数可以有多条语句;
③匿名函数中不可以使用选择和循环语句,但是def定义的函数可以;
④匿名函数直接返回表达式的值而不需要写return语句,但是def定义的函数要有返回值,则必须要用return语句;
⑤匿名函数只能处理简单问题,复杂问题还需通过def定义函数实现。
在某些情况下,匿名函数处理问题非常有效。下面列举匿名函数的一些应用。
(1)匿名函数作为方法的参数
例2:将1-10之间每个元素的平方依次放在同一列表中。
代码如下:
在Pycharm中运行程序后,其结果是:
说明:① 此例子将匿名函数作为append()方法的一个参数,调用匿名函数依次计算出循环变量i的平方,并依次追加在列表list_1之后;
② 若用def定义的函数来实现,则需要定义一个函数,其代码量比匿名函数多。
(2)匿名函数作为函数的实参
在Pycharm中运行程序后,其结果是:
说明:① 此例子在匿名函数中定义两个数进行的运算,并将其作为实参传递给形参,从而实现两个数的所有运算,其他运算可以用相类似的方法解决;
②若此问题用def定义的函数来解决,则需要定义三个函数来实现,可以看出匿名函数比def定义的函数的代码量少。
(3)匿名函数作为内置函数的参数
例4:通过匿名函数实现对列表中元素的排序。
代码如下:
在Pycharm中运行程序后,其结果是:
说明:① 匿名函数作为sort函数中key参数所对应的值,实现对列表中元素按照指定规则进行排序,其中lambda定义的匿名函数中的参数x表示列表中的一个元素,x['name']表示每个元素按照name进行排序,同理,x[‘age’]表示每个元素按照age进行排序;
② 此问题很难用def定义的函数实现。
本文通过介绍Python中匿名函数的定义与调用,并举例详细说明了三个方面的应用,可以看出匿名函数在解决某些问题时,更方便、更简洁、更易懂且代码量更少。