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 ...
随机推荐
- HHyperledger Fabric 之 TLS (fabric-java-sdk)使用grpcs方式访问fabric
我在很多fabric的技术群中,很多使用javasdk连接fabric的同友,初始的时候很多都没有成功的使用TLS进行区块链交易: 是sdk不支持,还是我们没有找到解决方案? 其实不然,我这里使用的是 ...
- 描述符\get/set/delete,init/new/call,元类
6.23 自我总结 1.描述符__get__,__set__,__delete__ 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了____get__(),__set__(),__d ...
- 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)
目录 一. 模型的制作 1.1 生成字体模型 1.2 多表面贴图 二. 镜头及动画 三. 大作业总结 示例代码托管在:http://www.github.com/dashnowords/blogs 博 ...
- python课堂整理11---函数即变量
一.前向引用 函数即是变量,在调用前要先定义好. def bar(): print('from bar') def foo(): print('from foo') bar() foo() def f ...
- linux初学者-系统日志(一)
linux初学者-系统日志(一) 系统日志可以记录系统的运行状态,如果运行故障,会说明错误的位置.所以对系统日志的了解和学习是非常有必要的. 1.系统日志的默认分类 系统日志会默认记录在以下地址中,不 ...
- python requests、xpath爬虫增加博客访问量
这是一个分析IP代理网站,通过代理网站提供的ip去访问CSDN博客,达到以不同ip访同一博客的目的,以娱乐为主,大家可以去玩一下. 首先,准备工作,设置User-Agent: #1.headers h ...
- Jquery 小结
1. 名词解释 实例对象:var p1=new Person(); p1就是实例对象 构造:function Person(){} 原型对象:在 JavaScript 中,每当定义一个对象(函数也是 ...
- springmvc+mybatis+spring+redis
只作参考,以防忘记使用! mybatis的配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DO ...
- 关于写自定义的SQL接口出现的问题
1.<if test=" as != ' ' "></if> 与 <if test=' as != " " ' ...
- javaweb入门--web是什么
WEB基本概念 首先明白web是什么,人们常说的web其实就是英文中页面的意思,准确来说是Internet主机供给外界访问的资源. 站在用户视角,也就是说,通过你浏览器(客户端)的地址栏输入资源(你要 ...