浅析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使用socket远程连接错误处理方法
Apr 29 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
更新修改后的Python模块方法
Mar 03 Python
python远程连接MySQL数据库
Apr 19 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 Python
Python字符串常规操作小结
Apr 03 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
mysql建立外键
2006/11/25 PHP
PHP输入流php://input介绍
2012/09/18 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
Python实现读取Properties配置文件的方法
2018/03/29 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
python对象与json相互转换的方法
2019/05/07 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
企业项目策划书
2014/01/11 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
学术会议邀请函
2015/01/30 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL