Python进阶笔记(1)_ 函数式编程 之 高阶函数

来源:互联网 发布:计算机病毒预防和软件 编辑:程序博客网 时间:2024/04/30 07:01

Python 入门笔记是我从 IMOOC 上学习之后做的小结。初始目的当然是为了再复习一遍,以及保存。同时,若能让更多的初学者受一点点的益处,那我也会感到欣慰。

我学python的最终目的是用其做图像处理应用。就目前的学习程度远不能达到此目的,所以,继续进阶学习是很有必要的。

处于此目的,我边学习,边做博客笔记。


首先我们学习 函数式编程。学习内容主要包括高阶函数、闭包和装饰器。本节(One)学习高阶函数,下一节(Two)学习闭包和装饰器。


高阶函数

高阶函数就是指其参数也可以是函数的函数。

来看看如下两个例子:

f = lenprint f([-20,5,12]) len = rangeprint len(2,8,2)
上面的输出分别为 3 和 [2, 4, 6, 8]。所以,在python 里,变量可以指向一个函数,而且函数名其实是指向函数的变量。

再来看一个更生动的例子,把函数作为了参数:

import mathdef add(x, y, func):    return func(x) + func(y)print add(16, -4, abs)print add(25, 16, math.sqrt)
此时输出分别为 20 和 9。


map( ) 函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

def format_str(s):    return s[0].upper() + s[1:].lower()print map(format_str, ['pHoEnix', 'trEE', 'SKY'])
输出为 ['Phoenix', 'Tree', 'Sky']。


reduce( ) 函数

reduce 不同于 map 的是,首先它必须有两个输入参数,其次它是将 list 前面的元素按照 f 函数运算后的结果,与下一个元素继续按照 f 函数计算。

如果 reduce 含有第三个元素,这个元素就是整个计算的初始值。

def add(x, y):    return x+yprint reduce(add), [2,4,6,8,10])


filter( ) 函数

filter 需要一个 f 函数和 list 作为输入参数,其中函数 f  的作用是对每个元素进行判断,返回 True或 False,filter() 根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新 list。直接来看例子:

用filter 滤出百位数和个位数相同的所有三位整数。

def is_xYx(num):    if num/100 == num%10:        return num        print filter(is_xYx, range(100,1000))


sorted( ) 函数

sorted 函数可对 list 按照参数 f (x, y) 函数的定义进行新的排序。也就是说,f 是一个比较函数,而且要求若 x 应该在 y 之前时,f 输出为 1;若 x 应该在 y 之后时,f 输出为 -1;x 和 y 相等时,输出为 0。

我们来看一段实现忽略大小写排序的算法。

def cmp_ignore_case(s1, s2):    if s1[0].lower() < s2[0].lower():        return -1    if s1[0].lower() > s2[0].lower():        return 1    return 0print sorted(['phoenix', 'Tree', 'sky', 'Rui','feng'], cmp_ignore_case)
输出为 ['feng', 'phoenix', 'Rui', 'sky', 'Tree']





















0 0
原创粉丝点击