什么是高阶函数


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

 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})

最新文章

  1. rabbitmq之back queue草稿
  2. Oracle数据库体系结构、启动过程、关闭过程
  3. 开学后,板刷usaco!
  4. 371. Sum of Two Integers
  5. POJ 2136
  6. C#反射之基础应用
  7. SqlMapConfig.xml全局配置文件解析
  8. proxy set 拦截
  9. hdu4223(dp)
  10. js css优化-- 合并和压缩
  11. DOM Exception error 类型
  12. python之路——5
  13. 基础DP(初级版)
  14. Windows 软件推荐大全【all】
  15. css基础--常用css属性02
  16. CodeM资格赛1
  17. ERP,SCM,CRM,BRP,OMS,WMS 企业管理的6大核心系统
  18. 编程之美 set 16 拈游戏分析(1)
  19. boost implicit_cast
  20. Centos7搭建Mysql-5.6.38,及主从复制。

热门文章

  1. Quartz教程五:SimpleTrigger
  2. [C#]委托实例分析(附源码)
  3. 【zznu-2060】 Minsum Plus(最小正子段和)
  4. 多线程-Thread、Runnable 创建线程和调用过程分析
  5. LeetCode OJ:Remove Duplicates from Sorted List II(链表去重II)
  6. Cscope 安装和使用
  7. EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)
  8. Vim技能修炼教程(10) - 代码跳转
  9. TCP、UDP详解
  10. HDU1800 hash+去前导0