详解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中的fileinput模块的简单实用示例
Jul 09 Python
python 性能提升的几种方法
Jul 15 Python
python实现八大排序算法(1)
Sep 14 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python如何在列表、字典中筛选数据
Mar 19 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
如何在python中执行另一个py文件
Apr 30 Python
Keras自定义IOU方式
Jun 10 Python
解决Pyinstaller打包软件失败的一个坑
Mar 04 Python
简单谈谈Python面向对象的相关知识
Jun 28 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
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
jQuery链使用指南
2015/01/20 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
javascript实现商品图片放大镜
2019/11/28 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
树莓派升级python的具体步骤
2020/07/05 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
Linux内核产生并发的原因
2012/07/13 面试题
面料业务员岗位职责
2013/12/26 职场文书
应届生如何写自荐信
2014/01/05 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书