浅析Python函数式编程


Posted in Python onOctober 06, 2018

Functional Programming,函数式编程。Python对函数式编程提供部分支持。对于纯函数编程,对任一函数,只要输入是确定的,输出就是确定的,可称之为无副作用。

一、高阶函数

1、变量指向函数

我们知道函数的计算结果可以赋值给变量,例如x = abs(-5)。

同理,变量也可以指向函数,例如f = abs。

如果一个变量指向了一个函数,那我们直接调用abs(x)与执行f(x)返回的结果是完全相同。

2、函数名也是变量

我们也可以把函数名看成是一个变量,例如abs()函数。执行语句abs=-5,之后调用abs(-5)就会报错,因为此时abs这个变量已经不指向绝对值函数了,而是指向一个整数-5。

3、函数作为形参

既然变量可以指向函数,函数也可以充当变量,那么一个函数就可以接收另外一个函数作为它自己的形式参数,即实现高阶函数。例如:

>>> def add(x , y , f ): # 把函数作为参数传入。

...   return f(x) + f(y)

>>> add (-5,-2,abs)

7

二、函数式编程的内建函数

1、map(func,seq)

语法:map(func,seq),接收两个参数,一个是函数func,一个是可迭代对象。

作用:将传入的func函数循环作用于seq序列的每个元素上,并返回新的可迭代对象。

注意:map()函数返回的是一个<map object>,我们可以使用list()函数将所获得的结果以list形式返回。

举个栗子:用map()实现f(x)=x*x

>>> def f(x):

...   return x*x

...

>>> map(f,[1,2,3,4,5])

<map object at 0x0327F670>

>>> list(map(f,[1,2,3,4,5]))   # 传入的函数f作用于序列的每个元素调并用list()

[1, 4, 9, 16, 25]

当然还可以使用其他方法实现:

exp1:list( map((lambda x:x*x),[1,2,3,4,5]))

exp2:[x*x for x in [1,2,3,4,5]]

2、reduce(func,list)

语法:reduce(func,list),必须接受两个参数。

作用:把func函数作用在list序列上[x1,x2,x3,...]。取出序列的头两个元素x1和x2,作用于func,取的一个单一的值,例如a,再将a与序列的下一个元素x3做func运算,依此反复。其效果就相当于reduce(f,x1,x2,x3)=f(f(x1,x2),x3)

注意:使用reduce(),必须导入模块from functools import reduce

大家可以自己找个栗子玩玩哈~~~

3、filter()

语法:filter(func,[序列]),接收一个“过滤”函数,和一个序列。返回的是一个Iterator可迭代对象。

作用:按照func规则过滤序列,filter()把传入的函数func依此作用于每个元素,然后根据返回值TrueorFalse,来保留为True的对应元素。

注意:跟map()类似,filter()返回的是一个可迭代对象,故需要使用list()来查看所获得结果并返回list类型。

举个栗子:在一个list中,删除偶数,保留奇数。

>>> def is_odd(n):

...   return n % 2 == 1 # 返回0(false) 或1(True)

...

>>> list( filter(is_odd,[1,2,3,4,5,6,7,8,9]) )

[1, 3, 5, 7, 9]
Python 相关文章推荐
python线程池的实现实例
Nov 18 Python
Python Web框架Pylons中使用MongoDB的例子
Dec 03 Python
提升Python程序运行效率的6个方法
Mar 31 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
python逆向入门教程
Jan 15 Python
Django 实现下载文件功能的示例
Mar 06 Python
python 获取当天每个准点时间戳的实例
May 22 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
jupyter notebook 增加kernel教程
Apr 10 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
Python实现iOS自动化打包详解步骤
Oct 03 #Python
Python中GIL的使用详解
Oct 03 #Python
Python线程同步的实现代码
Oct 03 #Python
详解通过API管理或定制开发ECS实例
Sep 30 #Python
Python 使用类写装饰器的小技巧
Sep 30 #Python
浅谈django三种缓存模式的使用及注意点
Sep 30 #Python
使用Python实现租车计费系统的两种方法
Sep 29 #Python
You might like
Protoss兵种介绍
2020/03/14 星际争霸
JavaScript While 循环基础教程
2007/04/05 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
解决vue热替换失效的根本原因
2018/09/19 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
通过python3实现投票功能代码实例
2019/09/26 Python
python 读取.nii格式图像实例
2020/07/01 Python
python raise的基本使用
2020/09/10 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
介绍一下linux的文件系统
2012/03/20 面试题
银行出纳岗位职责
2013/11/25 职场文书
小学家长会邀请函
2014/01/23 职场文书
学校消防演习方案
2014/02/19 职场文书
技能竞赛活动方案
2014/02/21 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
地球一小时活动总结
2015/02/27 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL