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 ...
随机推荐
- Linux 安装MySql——apt-get版
0)apt-get update 1)通过apt-get安装 更新设置到最新系统: sudo apt-get update sudo apt-get upgrade sudo apt-ge ...
- win8上安装sql server (2008 and 2008 R2)存在兼容性问题怎么解决
安装sql2008R2之前,需要先下载"AccessDatabaseEngine"组件并安装(百度上搜索下载就可以了),打补丁重启,再安装sql2008,安装时候提示兼容性问 ...
- python课堂整理11---函数即变量
一.前向引用 函数即是变量,在调用前要先定义好. def bar(): print('from bar') def foo(): print('from foo') bar() foo() def f ...
- [ PyQt入门教程 ] Qt Designer工具的使用
Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用.本文 ...
- 写这篇博客之前,我又忘了“==”和equals的区别。
没错.嘟嘟又把==号和equals 的区别给忘掉了 ==号比较基本类型的时候比的是值,比较引用类型的时候比较的是地址.equals比较基本类型的时候.... 脑子里关于这道题的答案好模糊好没有安全感 ...
- .net RabbitMQ 介绍、安装、运行
RabbitMQ介绍 什么是MQ Message Queue(简称:MQ),消息队列 顾名思义将内容存入到队列中,存入取出的原则是先进先出.后进后出. 其主要用途:不同进程Process/线程Thre ...
- vue.js主要内容
vue的主要内容 1.了解vue 2.vue开发环境的搭建和脚手架工具的使用 3.vue具体的指令和项目实战 1.了解vue 1.具备基础:html.css.js,模块化概念.ES6语法(简单即可) ...
- python3 编译安装
前言: Linux下大部分系统默认自带python2.x的版本,最常见的是python2.6或python2.7版本,默认的python被系统很多程序所依赖,比如centos下的yum就是python ...
- 夯实Java基础(七)——Static关键字
1.static介绍 static关键字一直是各大企业中面试常常会问到的问题,主要考察面试者的基础是否扎实,下面来介绍一下static关键字. Java中static表示“全局”或者“静态”的意思,可 ...
- Python学习系列(四)Python 入门语法规则2
Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...