详解Python函数式编程—高阶函数


Posted in Python onMarch 29, 2019

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

高阶函数

变量可以指向函数

详解Python函数式编程—高阶函数

函数名其实就是变量

函数名是什么?函数名其实就是指向函数的变量,对于abs这个函数,完全可以把函数名看做成为一个变量,

传入函数

既然变量可以指向函数,函数的参数可以接受变量,那么一个函数就可以当做另一个函数的变量,这种函数就被称为高阶函数

详解Python函数式编程—高阶函数

def add(x,y,f):
	return f(x)+f(y)

下面介绍一个内置的高阶函数

map接受两个参数,一个是Iterable一个是函数。map将传入的函数依次作用于到序列的每一个元素上,有点想列表生成式,并把结果作为写的Iterator返回

详解Python函数式编程—高阶函数

map得到的结果是一个Iterator,所以要用list()函数让整个序列变成一个list
list不是Iterator因为是[] , generator 是Iterator()
可以使用iter来将Iterable变成Iterator

详解Python函数式编程—高阶函数

本实例,实验了str

reduce用法

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

比如对一个序列求和

详解Python函数式编程—高阶函数

详解Python函数式编程—高阶函数

详解Python函数式编程—高阶函数

fliter

filter用于过滤序列,和map类似,filter也接受一个函数和一个序列,和map不同的是,filter把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素

def is_odd(n):
  return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

filter与reduce和map一样,反悔的都是Iterator惰性序列,需要用list转换

关于slice中的切片
详解Python函数式编程—高阶函数

str[::2]相当于正数开始2个一取,str[::-2]从倒数第一个元素开始,2个一取

Sorted

排序算法

排序也是在程序中经常用到的算法,无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。
数字我们可以直接比较,但如果是字符串或者是两个dict

sorted也是一个高阶函数,可以用key函数来实现自定义的排序

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < ‘a',结果,大写字母Z会排在小写字母a的前面。

这样,我们给sorted传入key函数,即可实现忽略大小写的排序:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

map reduce filter sorted

以上所述是小编给大家介绍的Python函数式编程—高阶函数详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
利用Python实现命令行版的火车票查看器
Aug 05 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
基于python实现语音录入识别代码实例
Jan 17 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
Python定义函数实现累计求和操作
May 03 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
如何用python批量调整视频声音
Dec 22 Python
python装饰器代码深入讲解
Mar 01 Python
如何通过一篇文章了解Python中的生成器
Apr 02 Python
python实现AES加密与解密
Mar 28 #Python
python实现计数排序与桶排序实例代码
Mar 28 #Python
python实现AES和RSA加解密的方法
Mar 28 #Python
python简单实现AES加密和解密
Mar 28 #Python
Python中dict和set的用法讲解
Mar 28 #Python
python3.x实现base64加密和解密
Mar 28 #Python
python实现AES加密解密
Mar 28 #Python
You might like
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
golang与PHP输出excel示例
2016/07/22 PHP
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python中super函数用法实例分析
2019/03/18 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
露营世界:Camping World
2017/02/02 全球购物
英国电子专家:maplin
2019/09/04 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
幼儿教师自我鉴定
2013/11/02 职场文书
家长会演讲稿范文
2014/01/10 职场文书
模范家庭事迹材料
2014/02/10 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
食堂标语大全
2014/06/11 职场文书
不错的求职信范文
2014/07/20 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
停电通知范文
2015/04/16 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
mysql 获取时间方式
2022/03/20 MySQL