设为首页 加入收藏

TOP

Python 进程线程协程 GIL 闭包 与高阶函数(五)(二)
2018-10-19 16:51:02 】 浏览:67
Tags:Python 进程 线程 GIL 闭包 高阶 函数
q, [y for y in range(10)]) #多定义了一个函数,尤其在只是用一次的情况下

所以你会发现自己如果能将「遍历列表,给遇到的每个元素都做某种运算」的过程从一个循环里抽象出来成为一个高阶函数 map,然后用 lambda 表达式将这种运算作为参数传给 map 的话,思维水平就要高出一般的原写法。

(2)reduce函数

reduce()函数也是Python内置的一个高阶函数。

reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

def f(x, y):
    return x + y
reduce(f, [1, 3, 5, 7, 9])

#先计算头两个元素:f(1, 3),结果为4;
#再把结果和第3个元素计算:f(4, 5),结果为9;
#再把结果和第4个元素计算:f(9, 7),结果为16;
#再把结果和第5个元素计算:f(16, 9),结果为25;
#由于没有更多的元素了,计算结束,返回结果25

(3) filter函数

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

#list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数
def is_odd(x):
    return x % 2 == 1

filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
#输出
[1, 7, 9, 17]

当然还可以实现很多功能,取决与函数定义的功能(删除 None 或者空字符串 等),filter仅仅是辅助函数起到过滤作用。

(4)函数式编程

def func(x):
    def funcx(y):
        return x+y
    return funcx
 
func2 = func(2)
func5 = func(5)
 
print(func2(5)) # 输出 7
print(func5(5)) # 输出 10

inc()函数返回了另一个函数incx(),于是我们可以用inc()函数来构造各种版本的inc函数,比如:inc2()和inc5()。这个技术其实就是上面所说的Currying技术。从这个技术上,你可能体会到函数式编程的理念:把函数当成变量来用,关注于描述问题而不是怎么实现,这样可以让代码更易读。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 单例设计模式 下一篇Python 映射

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目