python的高阶函数与匿名函数
一、高阶函数的定义
高阶函数:就是把函数当成参数传递的一种函数,例如:
def add(x,y,f):
return f(x)+f(y)
print(add(-8,11,abs)
结果:19
解释:
1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值
2.最后再做和运算
二、Python内置的几个高阶函数
1.map()函数
map()函数接收两个参数,一个是函数(function),一个是序列(sequence),map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。程序代码如下:
lt = (1,2,3,4,5)
def f2(x):
return x*x
ml = map(f2,lt)
print (type(ml))
print (ml)
结果:

解释:定义的函数f2。写f2时,指的是函数对象本身,当我们写f2(1)时,指的是调用f函数,并传入参数1,期待返回结果1。因此,map()传入的第一个参数是f2,即函数对象本身。像map()函数这种能够接收函数作为参数的函数,称之为高阶函数(Higher-order function)。
2.reduce()函数:reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
程序例子如下:
print("#############reduce################")
def f(x,y):
return x + y
print (reduce(f,[1, 2, 3, 4, 5],10))
结果:

3.filter()函数
Python内建的filter()函数用于过滤序列。和map类似,filter()也接收一个函数和一个序列。和map不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃。true保留,false丢弃
例子:在一个list中,删掉偶数,只保留奇数,程序代码如下:
print ("###############filter##################")
a = [1, 2, 3, 4, 5]
def is_odd(x):
return x%2 == 1
print (filter(is_odd,a))
结果:

4.匿名函数
- 没有函数名
- 单条语句组成
- 语句执行的结果就是返回值
- 可用作sort的key函数
例子如下:
def sum(x,y):
return x+y m = lambda x,y:x+y
print (m(4,5))
结果:9
5.sorted函数
对List、Dict进行排序,Python提供了两个方法。对给定的List L进行排序:
方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本
方法2.用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变
sorted函数的语法:
def sorted(iterable, cmp=None, key=None, reverse=False):
可以看到其中第一个参数是可迭代对象,后面的参数都是具有默认值的,重点阐述如下:
- iterable:是可迭代类型;
- cmp:用于比较的函数,比较什么由key决定;
- key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;
- reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
- 返回值:是一个经过排序的可迭代类型,与iterable一样。
参数说明:
(1) cmp参数
cmp接受一个函数,拿整形举例,形式为:
def f(a,b):
return a-b
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b,函数返回正数就行了
(2) key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下
def f(a):
return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
(3) reverse参数
接受False 或者True 表示是否逆序
例子:对字典进行排序,程序代码如下:
print ("############对字典进行排序####################")
mm = dict(a=1,c=3,d=9,b=10,f=4)
print (mm)
for i in mm:
print i
print ('#####################################')
for j in mm.iteritems():
print j
test = sorted(mm)
test =sorted(mm.iteritems(),key=lambda d:d[1])
print (test)
结果:

python的高阶函数与匿名函数的更多相关文章
- Python中的高阶函数与匿名函数
Python中的高阶函数与匿名函数 高阶函数 高阶函数就是把函数当做参数传递的一种函数.其与C#中的委托有点相似,个人认为. def add(x,y,f): return f( x)+ f( y) p ...
- python 基础 4.3 高阶函数下和匿名函数
一 .匿名函数 顾名思议就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?lambda 函数就是一种快速定义单行的最小函数,可以用在任何需要函数的地方. 常规版: def fun(x,y ...
- python基础——高阶函数
python基础——高阶函数 高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数a ...
- Python的高阶函数小结
一. 高阶函数定义 简而言之,Python的高阶函数就是指一个函数作为参数传递给另外一个函数的用法. 举一个最简单的高阶函数来说明: >>> def add(x,y,f): retu ...
- Scala 基础(十一):Scala 函数式编程(三)高级(一)偏函数、作为参数的函数、匿名函数、高阶函数
1 偏函数 1)在对符合某个条件,而不是所有情况进行逻辑操作时,使用偏函数是一个不错的选择 2)将包在大括号内的一组case语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范围值的 ...
- python函数式编程之返回函数、匿名函数、装饰器、偏函数学习
python函数式编程之返回函数 高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回. 函数作为返回值 def laxy_sum(*args): def sum(): ax = 0; fo ...
- python——内置函数和匿名函数
内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...
- python(day16)内置函数,匿名函数
# add = lambda x,y:x+y # print(add(1,2)) # dic={'k1':10,'k2':100,'k3':30} # def func(key): # return ...
- python之内置函数,匿名函数
什么是内置函数? 就是Python给你提供的,拿来直接用的函数,比如print,input等等.其实就是我们在创建.py的时候python解释器所自动生成的内置的函数,就好比我们之前所学的作用空间 内 ...
- Python函数(七)-匿名函数
函数就是变量,定义一个函数就是把一个函数体赋值给一个函数名,函数和变量的回收机制也是一样的 匿名函数不需要指定函数名,只需要有函数体,然后把这个函数体赋给一个变量 Python中使用lambda来创建 ...
随机推荐
- Bonita portal 源码编译(未完成)
首先下载源代码 https://github.com/bonitasoft/bonita-portal-js 以下内容为Github 的安装教程包含我安装过程中遇到的问题.并加以修正 Bonita p ...
- *187. Repeated DNA Sequences (hashmap, one for loop)(difference between subsequence & substring)
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
- IOS 拦截所有push进来的子控制器
/** * 能拦截所有push进来的子控制器 */ - (void)pushViewController:(UIViewController *)viewController animated:(BO ...
- 2016 Al-Baath University Training Camp Contest-1
2016 Al-Baath University Training Camp Contest-1 A题:http://codeforces.com/gym/101028/problem/A 题意:比赛 ...
- 编译安装 mysql 5.5,运行 cmake报错Curses library not found
是因为 curses库没有安装,执行下面的语句即可 yum -y install ncurses-devel 如果上述命令的结果是no package,则使用下面的命令安装 apt-get insta ...
- Ubuntu ndk环境变量配置
https://blog.csdn.net/gulingfengze/article/details/70149092 用source /etc/profile,有些博客写的使用sudo gedit ...
- 第39章 ETH—Lwip以太网通信—零死角玩转STM32-F429系列
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- C#进阶学习笔记(个人整理)
学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...
- docker简介以及优缺点
1.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制, ...
- 微信小程序开发入门学习(1):石头剪刀布小游戏
从今天起开始捣鼓小程序了2018-12-17 10:02:15 跟着教程做了第一个入门实例有兴趣的朋友可以看看: 猜拳游戏布局 程序达到的效果 猜拳游戏的布局是纵向显示了三个组件:文本组件(tex ...