高级python函数知多少?

写在前面

上期文章中,小编和大家聊了一下pandas库的一些高级用法,说明了怎么使用pandas库快速去生成虚拟变量矩阵,然而从目前反馈的情况看来,大家似乎对此缺少兴趣。对于这一点小编有点意外,这里有必要说几句。正所谓万丈高楼平地起,熟练地掌握python中的各种基础知识以及相关的高级技巧,才能够让你真正地进行商务或者投资实践,所以请不要小看这些python知识。另外,小编也不可能每期文章都去讲解一下比较高深的话题,更多时候小编也只是一个python方面的学生而已,所以还请不要过于苛责小编。为了强调小编对于python知识的重视,本期文章小编将继续讲解一下python中几种高级函数,熟练掌握这几个函数绝对能够极大地方便你的实践。下面正式开始。

匿名函数

提到函数,小编在之前的文章中已有介绍,这里便不再多做说明。本期小编准备讲的是python中的四种高级函数:匿名函数、map函数、reduce函数以及filter函数。掌握了这四种函数,那么你就对python的便捷以及高效有了一个更加直观的认识。首先,先和大家聊一下匿名函数。

传统意义上的自定义函数常常是以关键字开头,而后紧随函数名与函数主体,在引用时通过对函数名赋予相应的参数进而得到相应的值。和这种方式不同的是,lambda创建的同时直接返回一个函数而不是将这个函数赋给某个函数名,所以相对于正统的def函数定义,lambda就被称之为匿名函数。假设我要创建一个计算平方数的函数,如果采用def定义的话,那么我的函数形式应该是:

这样当我计算某个数(例如数字6)的平方时,我就需要将6输入到函数名称后面的参数中,即,这样便可以得到6的平方36。但是如果现在你采用lambda函数的话,那么你可以写成这样:

通过这个简单的例子说明了相对于def函数,lambda函数具有两大特征:

lambda是一个表达式,而不是一条语句;

lambda的主体是一个单个的表达式,而不是一个代码块。

这样说,可能会给你造成更多的困惑,简而言之,因为lambda本身的特殊性,使得它能够出现在很多def函数不便出现的地方,尤其是lambda函数常常被广泛运用于序列之中。举一个简单的列表例子予以说明。

这就是lambda函数优势所在,它简化了函数定义,扩展了函数用处。所以请习惯使用这个函数,并在平常的实践中加大使用它的频率,以期熟练掌握它。

map函数

初次看到map,也许你会在想这不是地图的意思吗,然而数学意义上,map的正确意义应该是映射,所以正如其名一样,这个函数的作用就是用来将某个对象映射到另一个对象之上,一般来说是将一个函数映射到一个序列之上,进而方便序列的运算。考虑一个问题,假如现在我们有一个列表[1,2,3,4,5],你想计算列表中每个数的平方并将结果输出到一个新的列表,你会怎么做,下面小编给出几种解法。

单从这个例子中,很明显第一种方法最好,然而不要忘记列表解析是有很大的限制的,一般最后控制在两层循环,这就极大地限制了列表解析的使用,而且很多时候列表解析对某些算法无法实现,但是map函数就不同了,它完全可以映射任何类型的函数,所以掌握了map函数就等于掌握了快速进行列表生成的钥匙。

reduce函数

reduce函数的作用是将函数作用在一个序列上,进而对序列进行累计运算。这样说,可能不太好理解,还是用一个例子说话吧。

当然对于这个求和最方便的方法自然是sum([1,2,3,4,5]),然而小编这里只是演示reduce函数的用法,当你掌握了reduce,那么就可以进行一下更加高级的运算。例如,现在你有一个序列[1,2,3,4,5],你想将其变成12345,你觉得你还能采用加和很快地完成吗(也许你会说,这个只需要采用五次加和和四次乘法就可以了,那如果我将序列扩展至100或者10000个数字时呢),这个时候使用reduce就可以很快完成。

所以不要觉得小编这里介绍的高级函数浪得虚名,你了解越大便会越爱这些。下面讲一下最后一个高级函数filter。

filter函数

这个函数的作用就是单词意思,筛选。这个函数具有两个参数,第一个参数为一个函数,也就是筛选规则,第二个参数一般为一个序列,然后依据筛选规则在序列中筛选出满足条件的元素组成新的序列。考虑一个序列[1,4,8,3,7,5,2],假设你想取出其中的奇数,那么你可以采用filter函数很快解决。

好事成双,下面再举一个例子来完成对于filter函数的介绍。这个例子讲解了怎么使用filter函数去求解素数。

计算素数的一种常用方法是埃氏筛法,它的算法过程表现为:首先列出从2开始的所有自然数,构造一个序列,取序列中的第一个数2,它一定是素数,然后用2除整个序列,筛除所有2的倍数,得到,然后取出新序列中的第一个数3,并输出所有3的倍数,得到,这样一直重复筛下去,便会得到所有素数。

[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71],是不是比你自己去排列快了很多。好了,对于filter函数的介绍就到这里吧,请大家自行参照相关资料进一步熟悉。

后记

本文讲到这里就暂时告一段落了,本期文章和大家聊了一下python中使用率较高的四种高级函数:lambda,map,reduce,filter。初步了解了使用这些函数快速处理序列的优势所在,当然更加熟练的操作永远需要你们自己实践,祝你们好运!最后再次感谢你们的支持与鼓励,你们的陪伴是小编前进的动力!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180809G1T2RE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券