一、高阶函数 map,reduce
1.map()
函数接收两个参数,一个是函数,一个是序列,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
def f(x): return x*x print map(f,range(1,5)) 运行结果: [1, 4, 9, 16]
2. reduce
把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
例如求1-100之和
def f(x,y): return x+y print reduce(f,range(1,5)) 运行结果:10
3.sorted排序
sorted()
函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
l=[34,25,1,3,50] print sorted(l) #运行结果:[1, 3, 25, 34, 50]
def reverse(x,y): if(x>y): return -1 elif (x<y): return 1 else : return 0 print sorted(l,reverse) #运行结果:[50, 34, 25, 3, 1]
4.函数作为返回值
def f(*args): def sub(): sum = 0 for x in args: sum = sum + x return sum return sub d=f(1,2,3,4,5,6,7) print d() #运行结果:28
把函数作为参数传入,或者把函数作为返回值返回,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
二、匿名函数
关键字lambda
表示匿名函数,冒号前面的x
表示函数参数。匿名函数有个限制,就是只能有一个表达式,不用写return
,返回值就是该表达式的结果。
print map(lambda x:x*x,range(1,6)) #运行结果:[1, 4, 9, 16, 25]
三、装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
import functools #定义装饰器 def log(f): @functools.wraps(f) def wrapper(*args,**kw): print "call %s"%(f.__name__) f(*args,**kw) return wrapper
因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处
#使用装饰器 @log def getNow(): print '2016-05-26' #调用 getNow() #运行结果:2016-05-26
四、偏函数
functools.partial
的作用就是,把一个函数的某些参数(不管有没有默认值)给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
import functools
def func(a,b=1,c=2):
return a+b+c
func2=functools.partial(func,b=2)
func3=functools.partial(func,c=3)
print func2(5)#运行结果9
print func3(1,4)#运行结果8
如需转载,请标明原文链接:http://www.cnblogs.com/janes/