• python【6】-函数式编程


    一、高阶函数 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/

  • 相关阅读:
    R语言学习——数据框
    R语言学习——数组
    R语言学习——矩阵
    R语言学习——向量
    SSM的项目结构
    simple-spring-memcached简介
    Arrays
    AbstractCollection 类
    Collections 类
    Map接口
  • 原文地址:https://www.cnblogs.com/janes/p/5531173.html
Copyright © 2020-2023  润新知