Python中带参数的decorator

来源:互联网 发布:美国创价大学 知乎 编辑:程序博客网 时间:2024/06/05 14:01
今天继续来分享Python中的一些小知识


今天分享的是带参数的decorator
在慕课网上学习到这一节的时候想了比较长的时间。


首先讲一下什么是装饰器
在Python当中,函数是可以作为参数被传入另一个参数的。我们把这种函数叫做高级函数。


而装饰器就是高级函数的一个小应用。
原理如下:装饰器接收一个函数之后,在函数体内定义另外一个函数,在这个新定义的函数内先执行操作A,之后再返回接收的那一个函数。


执行经过装饰的函数时便会发现,在执行原函数之前会执行操作A。


假设log是一个装饰器函数


def log(f):
    def h(*args,**kw):
        print'call %s'%f.__name__
        return f(*args,**kw)
return h


其中f是传入的log函数,h是新定义的函数,在h函数内,执行print命令后返回了f函数
而log函数则是返回这个新的函数h。


装饰器的表示方法:
@log
def a:
…………
即将放入log进行装饰


其实我和大家想分享的是带参数的装饰器。即


@log(1)
def a:
…………
这又是怎么一回事呢?


这时候的log是这样定义的
def log(n)
    def log_decorator(f)
        def h(*args,**kw):
            print'call %s'%f.__name__
            print n
            return f(*args,**kw)
    return h
return log_decorator


我们发现这是在原来无参数的装饰器外部又套了一层函数。
最外层函数的作用就是将参数引入到函数内


也许现在有点混
但是试着研究一下log(1)
发现他其实就是log_decorator


而log_decorator就是之前无参数时的log
因此得出一下结论:此log非彼log  ,此log内的log_decorator才对应彼log。


这样是不是好理解一点呢?









0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小三把房子过户怎么办 小三把房子卖了怎么办 打印机ip地址变了怎么办 电脑ip地址错误不能上网怎么办 修改了注册表电脑无法启动怎么办 香水喷到衣服上有印怎么办 家里一股猫的味道怎么办 干菊花里面有虫怎么办 安装时显示程序已关闭怎么办 电脑一直重启开不了机怎么办 应用安装在sd卡打不开怎么办 安装ps打不开安装包怎么办 安装好的软件打不开怎么办? win10系统语言修改不了怎么办 一个月婴儿吵夜怎么办 玩游戏一直闪退怎么办 钱站一直闪退怎么办 win7重装连不上网怎么办 笔记本屏幕横过来了怎么办 3D贴图丢了怎么办 百度文库安装后手机打不开怎么办 win7系统不带usb驱动怎么办 手机网页上的pdf打不开怎么办 网页下载pdf后缀是.do怎么办 ps界面太小怎么办win10 ps软件打不开程序错误怎么办 ps打开后 未响应怎么办 ps图层无法解锁怎么办 ie8浏览器电脑不能用怎么办 系统要ie6.0才能打开怎么办 2g手机内存不够怎么办 2g运行内存不够怎么办 手机运行内存2g不够怎么办 手机无法加载程序秒退怎么办 电脑账户密码忘记了怎么办 玩绝地求生卡顿怎么办 地下城总运行时间错误怎么办 逆战更新太慢怎么办 win7我的电脑没了怎么办 剑灵启动游戏慢怎么办 网页页面结束进程也关不掉怎么办