Python之高阶函数如何理解?
我们先要了解一下什么是所谓的高阶函数;
看定义:什么是高阶函数?
高阶函数:我们知道一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数。
常见的高阶函数:map()、reduce()、filter()等也是python内置的函数,也可以自定义高阶函数,其实装饰器也算一种高阶函数通过这些介绍应该能对高阶函数有一个详细的了解;
首先来看看函数作为入参的高阶函数:
def sonfunc():
print("in the sonfunc..") def highfunc(func):
func()
print("in the highfunc..") highfunc(sonfunc)
上面的sonfunc函数作为了入参传递给了highfunc函数,highfunc()是一个高阶函数;
首先来看看函数作为返回的高阶函数:
def sonfunc():
print("in the sonfunc..")
def highfunc(func):
print("in the highfunc..")
return func
res=highfunc(sonfunc)
res()
上面的sonfunc函数作为了返回的方式,被highfunc函数给返回了,highfunc()是一个高阶函数;
再来看一下常见的高阶函数怎么使用的,通过这些用法加深对高阶函数的理解;
map()使用方法:
map() 会根据提供的函数对指定序列做映射,用法:
map(func,iterable...) 第一个参数是提供的函数,第二个参数是指定的序列,序列可以是一个或者多个。
看一个map的例子:def square(x): return x**2
list1=[1,3,5,7]
res=map(square,list1)
print(list(res))
#匿名函数的写法
print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])))
上面的map函数传入了第一个参数:square函数的地址,这个函数用于求平方;
第二个参数是一个迭代对象:list1;map()函数会对list1中的元素传入函数中进行计算并返回一个新列表,注意这里需要用list对结果进行转换,否则map返回的是一个map类型的对象。
reduce()使用方法:
该函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果;
reduce()函数接收的的参数和map()类似,一个函数f,一个list,但行为和map()不同,reduce()传入的参数f必须接受2个参数;
特别说明:在python3中,reduce()函数需要引入:
from functools import reduce
def add(x,y):
return x+y
print(reduce(add,[1,2,3,4,5]))
#
匿名函数的写法:
print(reduce(lambda x,y:x+y,[1,2,3,4,5]))
以上计算结果是:15,计算的过程是:
第一次调用是把list中的前两个元素传递给add,第二次调用时,就是把前两个list元素的计算结果当成第一个参数,list的第三个元素当成第二个参数,传入add进行操作,以此类推,并最终返回结果;
计算的过程是:
1,计算a=add(1,2)的值为3
2,计算b=add(a,3)的值为6
3,计算c=add(b,4)的值为10
4,计算d=add(c,5)的值为15
相当于1+2+3+4+5+10 ,如果还有其他函数
filter()函数使用方法:
filter()函数是python内置的另一个有用的高阶函数,filter()函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回true或false,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件的元素组成的list;
格式:filter(function, iterable)
看一个例子:
list1=[1,2,3,4,5,6,7,8,9,10]
def even(x):
return x%2!=1
print(list(filter(even,list1)))
#匿名函数的写法
print(list(filter(lambda x:x%2==0,[1,2,3,4,5,6,7,8,9,10])))
上面定义了一个偶数函数even,使用filter过滤以后再给出一个新的偶数列表;
大家有没有掌握PYTHON对应的高阶函数知识呢?
Python之高阶函数如何理解?的更多相关文章
- Python的高阶函数小结
一. 高阶函数定义 简而言之,Python的高阶函数就是指一个函数作为参数传递给另外一个函数的用法. 举一个最简单的高阶函数来说明: >>> def add(x,y,f): retu ...
- python基础——高阶函数
python基础——高阶函数 高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数a ...
- JS高阶函数的理解(函数作为参数传递)
JS高阶函数的理解 高阶函数是指至少满足下列条件之一的函数. · 函数可以作为参数被传递 · 函数可以作为返回值输出 一个例子,我们想在页面中创建100个div节点,这是一种写法.我们发现并不是所有用 ...
- Python学习---高阶函数的学习
高阶函数 高阶函数:函数名可以作为参数传递输入,函数名还可以作为返回值返回 函数名可以重新赋值,因为其本身就是一个变量 函数本身就是一个对象, 函数的变量名f本身就是指向函数本身的,加上括 ...
- python之高阶函数filter
原文 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返 ...
- python的高阶函数(map,filter,sorted,reduce)
高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...
- Python笔记-高阶函数
1.函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量. 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 传入函数 既然 ...
- Python练习-高阶函数-2018.12.03
1.函数式编程的概念 在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言. 而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远 ...
- Python 基础 高阶函数
python 把函数作为参数 如果传入abs 作为参数 def add(x,y,y): return f(x) + f(y) add(-5,9,abs) 根据函数的定义,函数执行的代码实际上是. ab ...
随机推荐
- Android调用系统分享功能总结
Android分享-调用系统自带的分享功能 实现分享功能的几个办法 1.调用系统的分享功能 2.通过第三方SDK,如ShareSDK,友盟等 3.自行使用各自平台的SDK,比如QQ,微信,微博各自的S ...
- [小米OJ] 7. 第一个缺失正数
思路: 参考这个思路 即:将每个数字放在对应的第几个位置上,比如1放在第1个位置上,2放在第2个位置上. 注意几个点:将每个数放在它正确的位置,前提是该数是正数,并且该数小于序列长度,并且交换的两个数 ...
- SpringBoot系列——@Async优雅的异步调用
前言 众所周知,java的代码是同步顺序执行,当我们需要执行异步操作时我们需要创建一个新线程去执行,以往我们是这样操作的: /** * 任务类 */ class Task implements Run ...
- Python_我的学习笔记 (博客停更------)
贡献一张PyCharm快捷键图(图片是借用他人的)----------建议最大化查看,因为这样不会破坏布局 注:部分内容引用小甲鱼,其他等网页,网站内容.如有冒犯,请联系我. 2019.07.21 ...
- 支持微信页面右侧悬浮QQ在线客服
使用方法: 1.将style里的css样式复制到你的样式表中 2.将body中的代码部分拷贝到你需要的地方即可 (js.图片采用绝对路径,不建议修改) <!DOCTYPE html PUBLIC ...
- Core CLR Host 源码简单分析
在定制 CLR Host的时候,可以通过调用如下代码,来获取当前需要被宿主的程序调用入口: hr = Host->CreateDelegate( domainId, L"Main,Ve ...
- java课堂_动手动脑4
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 答:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0 ...
- tp5css和js引入问题
由于以前用的是tp3.2,现在转用tp5开啊个人博客,在引入CSS和JS的时候遇到了一些坑 在3.2时期需要在路径中添加public,而在tp5中则直接引入static即可. 在config.php下 ...
- echarts3.x 入门
echarts 使用 1.getStart 1.1引入 echart <!-- 引入 ECharts 文件 --> <script src="echarts.min.js& ...
- LeetCode——264. Ugly Number II
题目: Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime fact ...