什么是高阶函数


变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

 def fun(x, y, f):
print f(x), f(y) fun(1, -2, abs)
结果:
1 2

内置高阶函数


map函数

map( ) 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 list 返回

 def fun(x):
return x * x print map(fun, range(5))
结果:
[0, 1, 4, 9, 16] print map(str, [1, 2, 3])
结果:
['', '', '']

reduce函数

reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算

def add(x, y):
return x + y print reduce(add, range(5))
结果:
10

其实其运行过程为:add(add(add(add(0+1)+2)+3)+4)=10

filter函数

filter( ) 也接收一个函数和一个序列。和 map( ) 不同的是,filter( ) 把传入的函数依次作用于每个元素,然后根据返回值是 True还是 False 决定保留还是丢弃该元素

在一个 list 中,删掉偶数,只保留奇数:

def fun(n):
return n % 2 == 1 print filter(fun,range(5))
结果:
[1, 3]

sorted函数

• 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。通常规定如下:

 x < y, return -1
x == y, return 0
x > y, return 1 print sorted([3, 1, 2])
print sorted([3, 1, 2], reverse=True)
结果:
[1, 2, 3]
[3, 2, 1]

排序数字字符

li = ['', '', '', '']
print sorted(li, key=int)
结果:
['', '', '', '']

匿名函数

•当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 
•关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数

 print map(lambda x: x * x, [1, 2, 3, 4])

 def fun(x):
return x * x print map(fun, [1, 2, 3, 4])
结果:
[1, 4, 9, 16]
[1, 4, 9, 16]

• 匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。 
• 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;

 f = lambda x: x * x
print f
print f(3)
结果:
<function <lambda> at 0x7fde80eb7938>
9

•把匿名函数作为返回值返回

 def fun(x, y):
return lambda: x * x + y * y print fun(1, 2)
f = fun(1, 2)
print f()
结果:
<function <lambda> at 0x7f5c2942a9b0>
5

传入多个参数:

 f = lambda x,y =1,*args,**kwargs :(x*y,args,kwargs)
print f(2,4,5,a=1,b=5)
结果:
(8, (5,), {'a': 1, 'b': 5})

python中高阶函数学习笔记的更多相关文章

  1. Python中高阶函数sorted()用法

    在Python中,有内置的排序方法:sorted(iterable, key, reverse). Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.key指定的函数 ...

  2. Python中高阶函数讲解

    高阶函数讲解 1. 常规高阶函数 递归函数 格式:def func_name(variable): '''__doc__'''#函数的说明文档 if 条件表达式:#限制递归退出值 pass retur ...

  3. python中高阶函数与装饰器

    高阶函数的定义:传入参数有函数名或者返回值有内置函数名的函数. 最简单的高阶函数: def add(x, y, f):    return f(x) + f(y) add(-5, 6, abs) 常用 ...

  4. python 高阶函数学习, map、reduce

    一个函数可以接收另一个函数作为参数,这样的函数叫做高阶函数. 函数map(): map()函数接收两个参数,一个是函数,一个是Iterable, map把函数作用于序列的每一个元素,并把结果作为Ite ...

  5. python中高阶函数与装饰器(3)

    >>> f = lambda x: x * x>>> f<function <lambda> at 0x101c6ef28> >> ...

  6. python中高阶函数与装饰器(2)

    函数返回值为内置函数名: def sum(*args):    def sum_in():        ax = 0        for n in args:            ax = ax ...

  7. python中format函数学习笔记

    简而言之,format函数就是用{}来代替之前的输出字符时使用的% print('my name is %s and I am %d years old' % ('porsche',23)) 下面详细 ...

  8. Python高阶函数_map/reduce/filter函数

    本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...

  9. $《利用Python进行数据分析》学习笔记系列——IPython

    本文主要介绍IPython这样一个交互工具的基本用法. 1. 简介 IPython是<利用Python进行数据分析>一书中主要用到的Python开发环境,简单来说是对原生python交互环 ...

随机推荐

  1. OC与JS的交互详解

    事情的起因还是因为项目需求驱动.折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有一定的创造性,特此留下一点文字,方便日后回顾. 我要实现这样一个需求:按照本地的CSS ...

  2. C#学习历程(四)[实际问题]

    >>无法直接启动带有”类库输出类型”的项目 在编辑界面的右侧会出现[解决方案资源管理器],里面显示我们的程序项目和所有代码文件. 右键点击项目,在右键菜单中选择[属性] 一般导致该问题都是 ...

  3. LeetCode OJ:Gas Station(加油站问题)

    There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...

  4. redis的list类型以及其操作

    lists类型 给你个图;' lists类型以及操作List是一个链表结构,主要功能是push.pop.获取一个范围的所有值等等,操作中key理解为链表的名字.Redis的list类型其实就是每一个子 ...

  5. 20165202 2017-2018-2 《Java程序设计》第7周学习总结

    20165202 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容总结 Ch11 连接MySQL数据库 下载JDBC-MySQL数据库驱动 加载JDBC-MySQL ...

  6. css hover伪类选择器与JQuery hover()方法

    css hover伪类选择器 它属于anchor伪类 在支持 CSS 的浏览器中,<a>标签链接的不同状态都可以以不同的方式显示,常常用来改链接的颜色效果 实例 a:link {color ...

  7. 编写configure.ac

    configure.ac由一些宏组成(如果已经有源代码,你可以运行autoscan来产生一个configure.scan文件,在此基础修改成configure.ac将更加方便) 最基本的组成可以是下面 ...

  8. Skynet服务器框架(九) snax框架

    什么是 snax 由于 skynet 的 API 还是比较偏底层,为简化服务的编写提供一套简单的 API ,便有了这套 snax 框架,解决的问题: "编写一个 skynet 内部服务,处理 ...

  9. [置顶] flume高并发优化——(15)中间件版本升级

    在系统平稳运行一年的基础上,为提供更好的服务,现针对java,kafka,flume,zk,统一进行版本升级,请各位小伙伴跟着走起来,不要掉队啊! 名称 老版本号 新版本号 jdk 1.7.0_25 ...

  10. iOS 解决上传100张图片内存奔溃问题

    最近项目需求,从相册中提取100张图片,然后上传到服务器.前提是图片不能压缩.因为要将图片信息采集出来制作出3D模型.所以必须是高清图片. 先看下代码 [NetWorking uploadWithUr ...