从坷里化理解Py带参数的decorator

来源:互联网 发布:ins社交软件全名 编辑:程序博客网 时间:2024/06/08 12:03

这个类似于oop里的AOP操作

还有一个知识点就是坷里化函数

函数坷里化1

>>> def main(a):def test(b):print("test")print("main")return test>>> main(1)main<function main.<locals>.test at 0x02D33AE0>>>> main(1)(2)

函数坷里化2

第二个函数参数是函数的情况

>>> def main(a):def test(b):b()print("main")return test>>> main(1)(lambda :print("Hello"))mainHello>>> 

当函数的函数参数带参数也就是三层坷里化

>>> def main(a):def test(b):def wrap(para):b(para)return wrapprint("main")return test>>> main(1)(lambda x:print(x+1))main<function main.<locals>.test.<locals>.wrap at 0x02D47810>>>> main(1)(lambda x:print(x+1))(12)main13>>> 

看看Py里的标准的decorator


#coding=utf-8#!/usr/bin/pythondef log(tag):    print ('[%s]:' % tag)    def dec(fn):        def wraped(*argv,**kwgs):            print ('before')            fn(*argv,**kwgs)            print ('after')        return wraped    return dec@log("INFO")def main(n):    for i in range(n):        print (i*2)if __name__ == "__main__":    #@log(argv) 实际上等同于 main=log(argv)(main) --     main(10)





0 0
原创粉丝点击