浅析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做文本按行去重的实现方法
Oct 19 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python高级特性与几种函数的讲解
Mar 08 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
python文件读写代码实例
Oct 21 Python
python装饰器练习题及答案
Nov 01 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
python opencv实现简易画图板
Aug 27 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
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
javascript版2048小游戏
2015/03/18 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
原生js实现密码强度验证功能
2020/03/18 Javascript
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python模块常用四种安装方式
2020/10/20 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
品质主管的岗位职责
2013/12/04 职场文书
门卫人员岗位职责
2013/12/24 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
体育教学随笔感言
2014/02/24 职场文书
文化宣传方案
2014/03/13 职场文书
清明节演讲稿
2014/05/27 职场文书
出租房屋协议书
2014/09/14 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
节水宣传标语口号
2015/12/26 职场文书