首页IT科技python内置高阶函数(Python中高阶函数与装饰器教程)

python内置高阶函数(Python中高阶函数与装饰器教程)

时间2025-08-04 20:53:53分类IT科技浏览5221
导读:1高阶函数 1.1 数学概念 回顾下数学知识:...

1高阶函数

1.1 数学概念

回顾下数学知识:

y=f(x) 这是最开始接触的普通函数 y=g(f(x)) 这个就是我们接触到的高阶函数 在数学和计算机科学中             ,高阶函数至少应当是满足下面一个条件的函数: 1)接受一个或者多个函数作为参数 2)输出一个函数 程序中我们的高阶函数也类似

示例计数器的函数:

def counter(base): def inc(step=1): nonlocal base base += step return base return inc 1.2 内建函数应用高阶函数举例 sorte(iterable[,key][,reverse]) 排序,返回一个列表 filter(function, iterable) 过滤可迭代对象的元素                       ,返回一个迭代器 map(function, *iterable) -->map object 对多个可迭代对象的元素按照指定的函数进行映射        ,返回一个迭代器

2 装饰器

2.1 自定义高阶函数

柯里化Currying

自定义高阶函数前          ,先了解下柯里化Currying:

柯里化:指的是将原来接受两个参数的函数变成新的接收一个参数的函数,新的函数返回一个以原有第二个参数为参数的函数 z = f(x, y)转换成z=f(x)(y)

通过嵌套函数就可以把函数转换成柯里化函数

举例

def add(x,y): return x+y

改变后

def add(x): def _add(y): nonlocalt x retrun x+y return _add

这就是一个简单的高阶函数

2.2 高阶函数应用--装饰器

引入:

存在一个add函数             。 def add(x, y): return x + y

这个add()太low了                      ,我需要增强他的功能            ,譬如加入信息输出功能:

def add(x, y): print("call add, {}+{}".format(x,y)) return x + y

上面的加法函数实现我的需求       ,但还是不够好                     ,存在以下缺点:

1)打印语句的耦合太高                       。

2)add()属于业务功能                ,而输出信息属于非业务功能代码    ,类似日志的东东                     ,放在add()函数不太合适        。

那么改进下:

def add(x, y): return x + y def logger(fn): print("开始业务执行") x = fn(4, 5) print("执行结束                    ,结果:", x) print(logger(add))

好了一些,那继续改进

def add(x,y): return x+y def logger(fn,x,y): print("开始业务执行") ret = fn(x,y) print("执行结束",) return ret

改进后                 ,fn的参数仍受限制                        ,只能针对含有两个参数的add,我想让logger适用的范围更大一些    ,譬如我有一个sum(x,y,z)

继续改进 def logger(fn,*args,**kwargs): print("开始业务执行") ret = fn(*args,**kwargs) print("执行结束") return ret

这个时候             ,进行柯里化

def logger(fn): def _logger(*args, **kwargs): print(before) ret = fn(*args, **kwargs) print(after) return ret return _logger # 如下调用                       ,python学习交流群:489111204 add = logger(add) # 因为函数调用的关系        ,参数add的引用用在函数内部保存 add(4, 5) # 调用的是内部保存的add引用          ,而非原本的add函数

Python将其改进为装饰器

#Python学习交流QQ群:489111204 def logger(fn): def _logger(*args, **kwargs): print(before) ret = fn(*args, **kwargs) print(after) return ret return _logger @logger def add(x,y): return x+y print(add(4, 10))

装饰器是高阶函数一个重要应用                      ,是对传入函数的功能装饰或者是功能增强          。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
php分页实现跳转(无刷新分页 jquery.pagination.js 张龙豪 博客园) rtos event(rtmservice.exe – rtmservice是什么进程 有什么用)