我们先要了解一下什么是所谓的高阶函数;

看定义:什么是高阶函数?

  高阶函数:我们知道一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数。

常见的高阶函数: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之高阶函数如何理解?的更多相关文章

  1. Python的高阶函数小结

    一. 高阶函数定义 简而言之,Python的高阶函数就是指一个函数作为参数传递给另外一个函数的用法. 举一个最简单的高阶函数来说明: >>> def add(x,y,f): retu ...

  2. python基础——高阶函数

    python基础——高阶函数 高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数a ...

  3. JS高阶函数的理解(函数作为参数传递)

    JS高阶函数的理解 高阶函数是指至少满足下列条件之一的函数. · 函数可以作为参数被传递 · 函数可以作为返回值输出 一个例子,我们想在页面中创建100个div节点,这是一种写法.我们发现并不是所有用 ...

  4. Python学习---高阶函数的学习

    高阶函数 高阶函数:函数名可以作为参数传递输入,函数名还可以作为返回值返回 函数名可以重新赋值,因为其本身就是一个变量    函数本身就是一个对象,    函数的变量名f本身就是指向函数本身的,加上括 ...

  5. python之高阶函数filter

    原文 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返 ...

  6. python的高阶函数(map,filter,sorted,reduce)

    高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...

  7. Python笔记-高阶函数

    1.函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量. 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 传入函数 既然 ...

  8. Python练习-高阶函数-2018.12.03

    1.函数式编程的概念 在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近计算机的语言. 而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远 ...

  9. Python 基础 高阶函数

    python 把函数作为参数 如果传入abs 作为参数 def add(x,y,y): return f(x) + f(y) add(-5,9,abs) 根据函数的定义,函数执行的代码实际上是. ab ...

随机推荐

  1. 微信小程序全局状态管理 wxscv

    微信小程序中,数据状态不同页面中不能跨页面同步更新,也就是缺失类似vuex,mobx,redux全局的数据状态管理功能. 有些人移植了这些库,但是毕竟不是微信小程序生态的东西. Tencent也发布了 ...

  2. PHP中的$_POST变量

    定义 在 PHP 中,预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值. $_POST 变量 预定义的 $_POST 变量用于收集来自method ...

  3. sysctl -p详解

    个人一般sysctl -p 或sysctl -a比较多使用 sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎片去除以及源路由检 ...

  4. [ PyQt入门教程 ] Qt Designer工具的使用

    Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用.本文 ...

  5. MyBatis在Spring环境下的事务管理

    MyBatis的设计思想很简单,可以看做是对JDBC的一次封装,并提供强大的动态SQL映射功能.但是由于它本身也有一些缓存.事务管理等功能,所以实际使用中还是会碰到一些问题--另外,最近接触了JFin ...

  6. ld: library not found for -

    这几天在做微信登录,总是遇到这个问题,详细如下: ld: library not found for -lWeChatSDK clang: error: linker command failed w ...

  7. 调用ffmpeg视频压缩工具类

    package com.example.demo; import com.alibaba.fastjson.JSONObject;import com.aliyun.oss.ClientExcepti ...

  8. codeforces 327 A Ciel and Dancing

    题目链接 给你一串只有0和1的数字,然后对某一区间的数翻转1次(0变1 1变0),只翻转一次而且不能不翻转,然后让你计算最多可能出现多少个1. 这里要注意很多细节 比如全为1,要求必须翻转,这时候我们 ...

  9. MySQL 之 Explain 输出分析

    ​MySQL 之 Explain 输出分析 背景 前面的文章写过 MySQL 的事务和锁,这篇文章我们来聊聊 MySQL 的 Explain,估计大家在工作或者面试中多多少少都会接触过这个.可能工作中 ...

  10. Tomcat 单(多)实例部署使用

    一.前言 (一).概述 Tomcat 是由 Apache 开发的一个 Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控 ...