浅析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编程中的反模式实例分析
Dec 08 Python
python实现定时同步本机与北京时间的方法
Mar 24 Python
Python分析学校四六级过关情况
Nov 22 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
python中的colorlog库使用详解
Jul 05 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
如何使用Python实现一个简易的ORM模型
May 12 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
JS实现简单表格排序操作示例
2017/10/07 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
Python聊天室程序(基础版)
2018/04/01 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
python中删除某个元素的方法解析
2019/11/05 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
签约仪式主持词
2014/03/19 职场文书
物资采购方案
2014/06/12 职场文书
优秀家长自荐材料
2014/08/26 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
宣传稿格式范文
2015/07/23 职场文书
机械生产实习心得体会
2016/01/22 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server