高阶函数

函数式编程

• 函数可以认为是变量, 因此函数名可以作为参数传入函数;这样的函数称为高阶函数;

 Python--高阶函数及其装饰器

内置高阶函数

•  map

map(function, sequence[, sequence, ...]) -> list

对sequence序列中的每一个元素item依次执行function(item)函数 操作,最终返回一个

•  列表;

reduce

reduce(function, sequence[, initial]) -> value

对于序列中的每个元素迭代调用function函数;

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) =====》  (((1+2)+3)+4)+5).

注意的点: function必须要有两个参数;

•  filter函数

filter(function or None, sequence) -> list, tuple, or string

注意: function函数返回值为bool类型

•  sorted函数

sorted(iterable, cmp=None, key=None, reverse=False) -->  new sorted list

cmp=用于比较的函数, 返回值一定和cmp函数的返回值对应(1,-1,0);

 

# map/reduce

 Python--高阶函数及其装饰器

# li.sort() 作用于列表本身 ; 只能用于列表排序 ;

 Python--高阶函数及其装饰器

# sorted 返回一个新的对象 , 可以对任意可迭代的对象进行排序 ;

 Python--高阶函数及其装饰器

# sorted 逆序排序

 Python--高阶函数及其装饰器

函数作为形参传入函数

函数作为返回值

def fun(a, b): return xx

 Python--高阶函数及其装饰器

闭包(closure)

 Python--高阶函数及其装饰器

 

装饰器

- 器,可以理解为函数;

- 装饰器实质上是用来装饰函数的;

- 装饰器就是在原来功能基础上加上一些其他功能,即在程序执行前或者执行后- 加上需要的操作;

- 装饰器的功能,比如:权限的验证,日志记录, 函数运行时间统计, 执行函数前              

 

  预备处理, 执行函数后清理功能等;

- 产品经理, 开发人员之间的爱恨情仇

 Python--高阶函数及其装饰器

 Python--高阶函数及其装饰器

 

 

• 理解装饰器的实质(建议在pycharm中debug调试,查看运行过程)

 Python--高阶函数及其装饰器

• 装饰器应用之函数计时器

 Python--高阶函数及其装饰器

 Python--高阶函数及其装饰器

被装饰的函数有参数

案例参照上述代码

• 必选参数

• 默认参数

• 可变参数(注意: 尽量使用,通用性比较强)

• 关键字参数

 

装饰器带参数

 Python--高阶函数及其装饰器

 Python--高阶函数及其装饰器

 

装饰器案例之引入日志

• 添加装饰器@myLogger的函数都会记录日志

• 日志格式为 什么时间 start 什么函数 函数参数

• 文件操作学习后的升级: 把日志信息记录到文件/var/log/myfun.log中;

 Python--高阶函数及其装饰器

 Python--高阶函数及其装饰器

 

练习

- 编写Logger装饰器,实现被装饰的函数运行结束后,打印日志的信息;

- 日志格式内容为:时间、函数名、运行时间;

- 被装饰的函数可以接收任意个参数;

- 装饰器可以传参数,并将装饰器传的参数打印出来

- 装饰器显示为:“装饰器所传参数为:xxx”

 Python--高阶函数及其装饰器

Python--高阶函数及其装饰器