浅析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 相关文章推荐
Linux中安装Python的交互式解释器IPython的教程
Jun 13 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
python 文件操作删除某行的实例
Sep 04 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
python安装和pycharm环境搭建设置方法
May 27 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
python try...finally...的实现方法
Nov 25 Python
浅谈Python类的单继承相关知识
May 12 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 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
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
flask应用部署到服务器的方法
2019/07/12 Python
使用python远程操作linux过程解析
2019/12/04 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
Python os库常用操作代码汇总
2020/11/03 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
专科文秘应届生求职信
2013/11/18 职场文书
先进事迹演讲稿
2014/09/01 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript