浅析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中Random和Math模块学习笔记
May 18 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
基于python实现KNN分类算法
Apr 23 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
Apr 27 Python
python 判断文件或文件夹是否存在
Mar 18 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
重置版战役片段
2020/04/09 魔兽争霸
php数组去重实例及分析
2013/11/26 PHP
php实现分页显示
2015/11/03 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
Python学习资料
2007/02/08 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python实现在线翻译
2020/06/18 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
教师自我鉴定
2013/12/13 职场文书
怎样写演讲稿
2014/01/04 职场文书
单位介绍信范文
2014/01/18 职场文书
小学生元旦广播稿
2014/02/21 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
新郎结婚保证书
2015/02/26 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技