今天给大家推荐一个超级好用的Python内置函数,就是lambda方法。本教程将粗略的跟大家分享一下:什么是lambda函数?lambda方法什么时候不适合与apply()方法结合使用?什么是Lambda函数?在Python中,我们经常使用lambda关键字来声明匿名函数。所谓匿名函数,简单来说就是没有名字的函数。具体语法格式如下:lambdaarguments:expression其中可以接受任意数量的参数,但只允许有一个表达式,表达式的结果为函数的返回值。我们可以简单的写一个例子:(lambdax:x**2)(5)output:25过滤列表中的元素那么我们如何过滤列表中的元素呢?这里需要结合lambda函数和filter()方法,filter()方法的语法格式:filter(function,iterable)function--判断函数iterable--可迭代对象,列表或字典其中我们这样一个列表:importnumpyasnpyourlist=list(np.arange(2,50,3))其中我们要过滤掉2的幂后小于100的元素,我们定义一个匿名函数如下:lambdax:x**2<100最终结果如下:list(filter(lambdax:x**2<100,yourlist))output:[2,5,8]如果遇到比较复杂的计算过程,小编这里就可以了还是建议大家自己自定义一个函数,但是如果是简单的计算过程,lambda匿名函数绝对是最好的选择。结合map()函数map()函数的语法和上面的filter()函数类似,例如下面这个匿名函数:lambdax:x**2+x**3我们把它和map结合起来()方法使用它:list(map(lambdax:x**2+x**3,yourlist))输出:[12,150,576,1452,2940,5202,...]当然,正如我们之前提到lambda匿名函数可以接受多个参数,我们可以在这里试试,比如有两组list,我的list=list(np.arange(4,52,3))yourlist=list(np.arange(2,50,3))我们同样使用map()方法进行操作,代码如下:list(map(lambdax,y:x**2+y**2,yourlist,mylist))输出:[20,74,164,290,452,650,884,1154,...]和应用的组合()方法Pandas数据表中经常使用apply()方法,apply()方法中使用了lambda匿名函数。我们新建一个数据表,如下:myseries=pd.Series(mylist)myseriesoutput:0417210313416519622725828......dtype:int32apply()方法的使用与前两个。map()方法和filter()方法都需要将可迭代对象放入其中,这里的apply()是不需要的:myseries.apply(lambdax:(x+5)/x**2)output:00.56250010.24489820.15000030.10650940.08203150.06648260.05578570.048000......4dtype:float6而如果遇到DataFarme表数据,同样操作df=pd.read_csv(r'c_Data_v'sales]=df["Sales_Manager"].apply(lambdax:x.upper())df["Sales_Manager"].head()输出:0PABLO1PABLO2KRISTEN3ABDUL4STELLAName:Sales_Manager,dtype:objectandprocessingthroughtheapply()方法比直接使用str.upper()方法更快快点!!不适合使用的场景那么不适合使用的场景有哪些呢?首先,作为匿名函数,lambda函数不适合将其赋值给变量。比如下面这种情况:squared_sum=lambdax,y:x**2+y**2squared_sum(3,4)相对比较好的是自定义一个函数进行处理:defsquared_sum(x,y):returnx**2+y**2squared_sum(3,4)output:25遇到如下情况,我们可以修改代码稍微简化处理:importmathmylist=[10,25,40,49,65,81]sqrt_list=list(map(lambdax:math.sqrt(x),mylist))sqrt_listoutput:[3.16227766,5.0,6.324555320,7.0,8.062257748,9.0]我们可以将其简化为:importmathmylist=[10,25,40,49,65,81]sqrt_list=list(map(math.sqrt,mylist))sqrt_listoutput:[3.162277,5.0,6.324555,7.0,8.062257,9.0]如果是Python内置函数,尤其是模块用于math等算术运算,不需要放在lambda函数中,直接提取使用
