浅析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远程登录代码
Apr 29 Python
Python生成随机MAC地址
Mar 10 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
Apache,wsgi,django 程序部署配置方法详解
Jul 01 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
Pytorch之保存读取模型实例
Dec 30 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
python 调整图片亮度的示例
Dec 03 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP树-不需要递归的实现方法
2016/06/21 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
javascript截取字符串小结
2015/04/28 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
公司业务员岗位职责
2014/03/18 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
开学典礼策划方案
2014/05/28 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
实训报告范文大全
2014/11/04 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
html5表单的required属性使用
2021/07/07 HTML / CSS
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
带你了解Java中的ForkJoin
2022/04/28 Java/Android