美文网首页
Python函数式编程

Python函数式编程

作者: WZChan | 来源:发表于2017-11-22 11:55 被阅读0次

    函数是编程是一种抽象程度很高的编程范式。特点之一是允许将函数本身作为参数传入另一个函数。并且允许返回一个函数。

    1 高阶函数

    变量可以指向的函数

    f = abs
    其中abs为一个函数,即变量f指向abs本身。

    函数名也是变量

    abs()是函数,abs其实是一个指向该函数的变量。
    ps:abs定义在__builtin__模块中。

    传入函数

    函数的参数可以接受变量,那么也可以接受其实是变量的函数名。

    >>>def add(x, y, f):
              return f(x) + f(y)
    >>>add(-9, 6, abs)
    15
    

    实际上就是abs(-9) + abs(6)的过程。

    总结:把函数作为参数传入,这样的函数就是高阶函数。

    2 map() / reduce()

    map()

    接受两个参数:函数与序列。
    map(f, [ something ])
    map(str, [1, 2, 3, 4, 5, 6]) ==> ['1', '2', '3', '4', '5', '6']
    实际上map()是把计算过程抽象化了。

    reduce()

    接收两个参数:函数和序列。
    与map()不同的是,reduce将接收到的函数作用在序列的每一个元素上并将其累计计算。

    >>> def fn(x, y):
           return x * 10 + y
    >>> reduce(fn, [1, 3, 5, 7, 9])
    13579
    

    3 filter()

    filter()接收一个函数和一个序列。
    它将传入的函数依次作用于每个元素,然后根据返回值决定保留或是丢弃。
    例:找1~100之间的素数

    def is_prime(n):
        if n == 1:
            return True
        else:
            for i in range(2, n-1):
                if n % i == 0:
                    return False
        return True
    print filter(is_prime, range(1, 101))
    

    结果:[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

    4 sorted()

    排序算法
    通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

    >>> sorted([36, 5, 12, 9, 21])
    [5, 9, 12, 21, 36]
    
    def reversed_cmp(x, y):
        if x > y:
            return -1
        if x < y:
            return 1
        return 0
    

    传入自定义的比较函数reversed_cmp,就可以实现倒序排序:

    >>> sorted([36, 5, 12, 9, 21], reversed_cmp)
    [36, 21, 12, 9, 5]
    

    5 返回函数

    函数作为返回值
    def lazy_sum(*args):
        def sum():
            ax = 0
            for n in args:
                ax = ax + n
            return ax
        return sum
    

    每次返回的函数都是新的。

    闭包

    返回函数不要应用任何循环变量,或是后续会发生变化的变量。

    相关文章

      网友评论

          本文标题:Python函数式编程

          本文链接:https://www.haomeiwen.com/subject/ouidvxtx.html