浅析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模版的教程
Apr 29 Python
python中字符串类型json操作的注意事项
May 02 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
pip安装python库的方法总结
Aug 02 Python
对Django 中request.get和request.post的区别详解
Aug 12 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
Python函数参数定义及传递方式解析
Jun 10 Python
新手学python应该下哪个版本
Jun 11 Python
python如何写try语句
Jul 14 Python
python正则表达式 匹配反斜杠的操作方法
Aug 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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
python设置检查点简单实现代码
2014/07/01 Python
python 上下文管理器使用方法小结
2017/10/10 Python
django项目搭建与Session使用详解
2018/10/10 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
Python占用的内存优化教程
2019/07/28 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
教师自荐书
2013/10/08 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
中班开学寄语
2014/04/04 职场文书
房屋出租协议书
2014/04/10 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
内勤岗位职责范本
2015/04/13 职场文书
产品调价通知函
2015/04/20 职场文书
旅游项目合作意向书
2015/05/08 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
MySQL分库分表详情
2021/09/25 MySQL
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python