浅析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小技巧之批量抓取美女图片
Jun 06 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
tensorflow学习笔记之mnist的卷积神经网络实例
Apr 15 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
利用Django模版生成树状结构实例代码
May 19 Python
对Python中画图时候的线类型详解
Jul 07 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
Python实现手绘图效果实例分享
Jul 22 Python
Python3如何在服务器打印资产信息
Aug 27 Python
小结Python的反射机制
Sep 28 Python
Python合并pdf文件的工具
Jul 01 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
Python实现队列的方法
2015/05/26 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
python字典按照value排序方法
2020/12/28 Python
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
办公室文员工作自我评价
2013/12/01 职场文书
仓库主管岗位职责
2014/03/02 职场文书
运动会拉拉队口号
2014/06/09 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
Go归并排序算法的实现方法
2022/04/06 Golang