浅析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实现html转ubb代码(html2ubb)
Jul 03 Python
Python中的异常处理学习笔记
Jan 28 Python
在Python的列表中利用remove()方法删除元素的教程
May 21 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
pandas分区间,算频率的实例
Jul 04 Python
Django后台admin的使用详解
Jul 08 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
python中使用.py配置文件的方法详解
Nov 23 Python
Django扫码抽奖平台的配置过程详解
Jan 14 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 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
jQuery 选择器理解
2010/03/16 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python异常处理操作实例详解
2018/05/10 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
用Django写天气预报查询网站
2018/10/21 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
烹饪大赛策划方案
2014/05/26 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
个人投资合作协议书
2014/10/12 职场文书
2014年度培训工作总结
2014/11/27 职场文书
2015年财务人员工作总结
2015/04/10 职场文书