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 ...
随机推荐
- Spring Boot 中 Redis 的使用
Spring Boot 对常用的数据库支持外,对 Nosql 数据库也进行了封装自动化,如Redis.MongoDB等,本文主要介绍Redis的使用. Redis 介绍 Redis 是目前业界使用最广 ...
- Python_我的学习笔记 (博客停更------)
贡献一张PyCharm快捷键图(图片是借用他人的)----------建议最大化查看,因为这样不会破坏布局 注:部分内容引用小甲鱼,其他等网页,网站内容.如有冒犯,请联系我. 2019.07.21 ...
- C# Winform程序如何使用ClickOnce发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- linux初学者-延迟及定时任务篇
linux初学者-延迟及定时任务篇 在linux系统的学习工作中,南面会遇到需要延迟进行的任务和需要定时去完成的任务,就像手机的闹钟一样,这时候就需要用到linux系统当中的系统延迟和定时任务的设置了 ...
- Java 第四章
switch选择结构 语法:switch(表达式){ case 常量 1: //代码块1: break: case 常量 2: //代码块2: break: ...... default ...
- TestNG中DataProvider的用法一
目录 为什么要使用DataProvider DataProvider的常规用法 带Method参数的DataProvider 带ITestContext的DataProvider DataProvid ...
- isMemberOfClass、isKindOfClass原理分析
isMemberOfClass - 调用者必须是传入的类的实例对象才返回YES- 判断调用者是否是传入对象的实例,别弄反了,如 [s1 isMemberOfClass:p1] ,意思是s1是否是p1的 ...
- ASP.NET Core on K8S深入学习(2)部署过程解析与Dashboard
上一篇<K8S集群部署>中搭建好了一个最小化的K8S集群,这一篇我们来部署一个ASP.NET Core WebAPI项目来介绍一下整个部署过程的运行机制,然后部署一下Dashboard,完 ...
- Oracle DBLink跨数据库访问SQL server数据同步 踩坑实录
项目需求:这里暂且叫A公司吧,A公司有一套人事管理软件,需要与我们公司的软件做人员信息同步,A公司用的是SQL server数据库,我们公司用的Oracle,接口都不会开发(一万句"fuck ...
- ASP.NET Core Identity自定义数据库结构和完全使用Dapper而非EntityFramework Core
前言 原本本节内容是不存在的,出于有几个人问到了我:我想使用ASP.NET Core Identity,但是我又不想使用默认生成的数据库表,想自定义一套,我想要使用ASP.NE Core Identi ...