博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰器
阅读量:5818 次
发布时间:2019-06-18

本文共 2047 字,大约阅读时间需要 6 分钟。

高阶函数:接受一个或多个函数作为参数或者返回值是一个函数;

def counter(base):    def inc(step=1):        nonlocal base        base += step        return base    return incfoo = counter(5)print(foo())

柯里化

指的是将原来接收两个或多个参数的函数变成接收一个参数的函数,并且返回接收余下的参数且返回结果的新函数;如 z = f(x,y) 转换成 z = f(x)(y)的形式

将加法函数柯里化def add(x, y):    return x + y转换如下def add(x):    def _add(y):        return x+y    return _addadd(5)(6)通过嵌套函数就可以把函数转换成柯里化函数

装饰器

我理解的装饰器就是:需要在源功能函数上增加某种功能,又不改变源函数的调用方式和参数个数;

加法函数,想要增加被调用是输出调用参数信息

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

增加信息输出功能

def add(x,y):    print('call add, x + y')    return x + y
#更改了源函数中的内容,不符合要求;def add(x,y):    return x + ydef logger(fn):    print('begin')    x = fn(4,5)   #参数写死;    print('end')    return xprint(logger(add))#参数传递有问题;def add(x,y):    return x + ydef logger(fn,*args,**kwargs):    print('begin')    x = fn(*args,**kwargs)    print('end')    return xprint(logger(add,5,y=60))#参数传递问题解决了,调用方式还需要调整;def add(x,y):    return x + ydef logger(fn):    def wrapper(*args,**kwargs):        print('begin')        x = fn(*args,**kwargs)        print('end')        return x    return wrapper#print(logger(add)(5,y=50))add = logger(add)print(add(x=5,y=10))#柯里化一下,最后输出,两种写法一样,理解一下;def logger(fn):    def wrapper(*args,**kwargs):        print('begin')        x = fn(*args,**kwargs)        print('end')        return x    return wrapper@logger # 等价于add = logger(add)def add(x,y):    return x + yprint(add(45,40))#装饰器, @logger需要写在下面,写在上面会报NameError;装饰器:import datetimeimport timedef logger(fn):    def wrap(*args, **kwargs):        # before 功能增强        print("args={}, kwargs={}".format(args,kwargs))        start = datetime.datetime.now()        ret = fn(*args, **kwargs)        # after 功能增强        duration = datetime.datetime.now() - start        print("function {} took {}s.".format(fn.__name__, duration.total_seconds()))        return ret    return wrap@logger # 等价于 add = logger(add)def add(x, y):    print("===call add===========")    time.sleep(2)    return x + yprint(add(4, y=7))

装饰器是一个函数,形参是一个函数,返回值也是一个函数;

 

转载于:https://www.cnblogs.com/52py/p/7693439.html

你可能感兴趣的文章
分享Silverlight/WPF/Windows Phone一周学习导读(10月22日-10月29日)
查看>>
2013Q1财报:谁在“补贴”苹果?
查看>>
Lync server 2013数据库镜像报错及解决
查看>>
颠覆与重构——戴尔助力徐工集团等行业客户实现业务转型
查看>>
poj3176
查看>>
[转载]Android布局文件中命名空间的解析
查看>>
超越极限编程 - 视频分享第8弹!
查看>>
ZOJ-2770 Burn the Linked Camp 差分约束
查看>>
为Visual Studio添加配色方案
查看>>
在ASP.NET中运行控制台程序
查看>>
winform datetimepicker 自定义日期控件
查看>>
Linux 文件IO理解
查看>>
Ninject 2.x细说---2.绑定和作用域
查看>>
30个非常时尚的网页联系表单设计优秀示例
查看>>
使用membership(System.Web.Security)来进行角色与权限管理
查看>>
C# 委托、事件 学习
查看>>
opticom 语音质量验证白皮书
查看>>
3D实时渲染中的BSP树和多边形剔除
查看>>
Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
查看>>
Rational Rose 2003 下载、破解及安装方法(图文)
查看>>