Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180586
  • 博文数量: 13
  • 博客积分: 395
  • 博客等级: 一等列兵
  • 技术积分: 364
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-05 20:06
文章分类
文章存档

2013年(2)

2012年(11)

分类: 系统运维

2012-12-07 16:42:40

python的强大之处体现在很多方面,而我喜欢python有时候仅仅是因为有趣而已。今天看了几个非常有趣的函数,感觉功能比较相近,所以总结一下。


1、lambda:

准确的说,lambda并不是一个函数,而是python中的一个关键字。但是感觉与那几个函数功能联系很大。所以在这里一起列举。
python 允许用 lambda 关键字创造匿名函数。lambda 表达式返回可调用的函数对象。查了好多资料,貌似这个是从lisp借鉴过来的特性。个人感觉其实lambda就是def的单行版。比较简单。

点击(此处)折叠或打开

  1. def true():
  2.      return True
这是用def定义的一个函数。如果用lambda的话就是这样的:

点击(此处)折叠或打开

  1. true = lambda :True
lambda这个东西简单的很,返回的是一个函数对象,你可以把这个对象赋值给一个变量,这样你就有了一个可以调用的函数。


再比如这句话:


点击(此处)折叠或打开

  1. def add(x, y): return x*y
如果用lambda实现,就应该是这样子的:

点击(此处)折叠或打开

  1. lambda x, y: x * y


2、apply:

apply用来间接的调用一个函数,假设一个函数add(x,y),而apply就好像在add的外边再加一层封装,比如这样:apply(add,(x,y))。apply的返回值就是调用函数的返回值。

apply(function, args, [keywords])
如下:

点击(此处)折叠或打开

  1. def add(x,y):
  2.     return x y

  3. apply(add,(3,4))

  4. #使用apply调用函数add
  5. #参数整合成一个元组作为apply的第二个参数

乍一看感觉有点画蛇添足吧。但是却一点都不画蛇添足。这样我们可以使用apply在一个地方根据情况调用不同的函数,虽然这种功能可以通过其他方式实现,可是无疑使用apply是最简单的方法之一。(个人理解)

在python1.6中有效的摈弃了 apply()。 这个函数将来会逐步淘汰,在未来版本中最终会消失。(这句话出自《python核心技术》)


3、filter:

filter英文就是过滤器的意思。这里用这个意思来解释真是再合适不过。假设现在一个函数是对单个的元素进行处理。而filter能做的就是,对一系列的元素挨个进行过滤,最后返回所有符合元素的集合。

说白了,就是给你一堆红豆和黑豆,你按照要求找出所有的红豆或者黑豆然后返回符合要求的豆子。这就是filter做的事情。

假设我们想要找出100之内能被3整除的所有数,就可以用filter来做:


点击(此处)折叠或打开

  1. def fun(x):
  2.     if x%3==0:
  3.         return x
  4.     

  5. n=filter(fun,range(1,100))

  6. print n
filter是一个非常有用的函数,可以避免一次循环,让代码的结构更加清晰。


4、map:

filter是作为一个过滤器将参数过滤一遍选择符合条件的返回。而map与filter相似,作用却并不是过滤。map会将对于一个元素操作的函数调用映射到一个列表上的每一个元素。然后返回每次调用的返回值的列表。

比如说我们要对一个序列中每个数都加一。


点击(此处)折叠或打开

  1. list=range(1,10)

  2. list2=map((lambda x:x+1),list)

  3. print list2
map是映射的意思。就是将同一个操作映射到一个序列的每一个元素。


5、reduce:

reduce与上边两个都挺像,但是又有些不同。

官方上是这么说的,reduce 使用了一个二元函数(一个接收带带两个值作为输入,进行了一些计算然后返回一个值作为输出),一个序列,和一个可选的初始化器,卓有成效地将那个列表的内容“减少”为一个单一的值,如同它的名字一样。在其他的语言中,这种概念也被称作为折叠。 

其实就是一串数据,reduce使用的函数是二元函数,首先从这串数据中取两个计算之后返回一个值。然后这个值和再从这一串数据中取出一个组成下一次调用的两个参数。知道最后将一个序列缩减为只剩一个值。返回的就是这个值。

比如要计算1~100的所有能被3整除的数字的和的话,使用上述的函数应该是这样的:

点击(此处)折叠或打开

  1. list=filter((lambda x:if x%3==0:return x),range(1,100))
  2. #这句用filter将1~100中能被3整除的元素筛选出来

  3. list2=reduce((lambda x,y:return x+y),list)
  4. #这句把所有筛选出来的元素加起来



这些函数都非常有意思,可以非常高效率的缩短代码的长度,有效的节省程序员的时间。在实际的项目中作用很大。





时间就是金钱啊,人生苦短,我用python。

末了加一句自己的感叹,这语言越高级越接近于自然语言了。。。是不是某一天对着电脑说话就能编程了。。。嘿嘿。。。
阅读(5873) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~