美文网首页
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 函数式编程

    高阶python 函数式编程 - 函数式 函数式编程(FunctionalProgramming) - 基于lam...

  • Python函数式编程

    虽然 Python 不是函数式编程语言(是命令式编程语言),但是支持许多有价值的函数式编程工具。Python 提供...

  • Python函数式编程指南

    注:采转归档,自己学习查询使用 Python函数式编程指南(1):概述Python函数式编程指南(2):函数Pyt...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

  • Python高阶函数

    本篇将介绍Python的函数式编程,介绍高阶函数的原理,更多内容请参考:Python学习指南 函数式编程 函数是P...

  • Python进阶笔记

    文|Seraph 函数式编程 1 纯函数式编程:不需要变量、没有副作用、测试简单2 Python不是纯函数式编程(...

  • python函数式编程

    函数式编程指引 — Python 3.7.3 文档

  • Python 中的函数式编程 - PyTips 0x02

    项目地址:https://git.io/pytips Python 中的函数式编程 函数式编程(英语:functi...

  • python必知必会7

    Python 支持函数式编程吗? 近些年来,由于函数式编程易于调试和测试的优点,函数式编程越来越受到关注。虽然 P...

  • 向量化

    python向量化本身做得不是很好需要借助函数式编程或者列表推导式实现 1 列表推导式 2 函数式编程

网友评论

      本文标题:Python函数式编程

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