python函数式编程

2018-10-06  本文已影响0人  LittleTrue

高阶函数

lamada表达式构建匿名函数/ 声明普通函数的函数名都可以当做一个变量, 那么这个变量当然可以被传入函数中。

把函数作为参数使用的函数, 叫高阶函数

python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率


返回函数

需要注意的是, 在返回闭包中, 不能引用任何循环变量

def f():
    print 'call f()...'
    # 定义函数g:
    def g():
        print 'call g()...'
    # 返回函数g:
    return g

装饰器

装饰器(Decrator)

装饰器的使用:

使用@语法,即在每次要扩展到函数定义前使用@+函数名

#既不需要侵入,也不需要函数重复执行
import time
def deco(func):
    def wrapper():  //如果被引用方法带参数, 加入参数*args, **kwargs  即带不定参数
        startTime = time.time()
        func()//如果被引用方法带参数, 加入参数*args, **kwargs  即带不定参数
     #从这里也可以发现, 装饰器仍然必须保留了原函数的调用, 这说明了
      #(1) 装饰器不能修改被装饰的函数的源代码,只是对其 预处理/输入/结果进一步控制而已
     # (2) 装饰器不能修改被装饰的函数的调用方式
        endTime = time.time()
        msecs = (endTime - startTime)*1000
        print("time is %d ms" %msecs)
    return wrapper

@deco
def func():
    print("hello")
    time.sleep(1)
    print("world")

if __name__ == '__main__':
    f = func #这里f被赋值为func,执行f()就是执行func()
    f()

如上例的deco就是一个基本的装饰器,注意--多个装饰器装饰一个函数,其执行顺序是从下往上。


偏函数

使用偏函数需要导入functools 模块
import functools import partial as pto

使用偏函数可以通过有效地“冻结”那些预先确定的参数,来缓存函数参数,然后在运行时,当获得需要的剩余参数后,可以将他们解冻,传递到最终的参数中,从而使用最终确定的所有参数去调用函数。

import functools import partial as pto

def add(a,b):
      return a+b;

puls = pto(add,100)
result = puls(9)

在这里偏函数表达的意思就是,在函数add的调用时,我们已经知道了其中的一个参数,我们可以通过这个参数,重新绑定一个函数,就是pto(add,100),然后去调用即可。

对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数比较合适。

上一篇 下一篇

猜你喜欢

热点阅读