设为首页 加入收藏

TOP

Python装饰器小案例分析
2019-03-02 20:08:03 】 浏览:76
Tags:Python 装饰 案例分析

装饰器语法是Python语言更加优美且避免很多繁琐的事情,flask中配置路由的方式便是装饰器。


首先python中一个函数也是可以当做一个对象进行传递的。


def linuxidc(f):
    def she():
        print("I'm a linuxidc")
        return f()
    return she


@linuxidc
def linuxmi():
    print("I'm a linuxmi")


if __name__ == "__main__":
    linuxmi()


输出结果为


I'm a linuxidc
I'm a linuxmi


Python装饰器小案例分析


上面代码相当于


linuxmi = linuxidc(linuxmi)
linuxmi()


带参数的装饰器


def change(a):
    def linuxidc(f):
        def she():
            print("I'm a linuxidc")
            f()
            print("you're not ,you're {} linuxidc".format(a))
        return she
    return linuxidc


@change("fake")
def linuxmi():
    print("I'm a linuxmi")


if __name__ == "__main__":
    linuxmi()


结果:


I'm a linuxidc
I'm a linuxmi
you're not ,you're fake linuxidc


Python装饰器小案例分析


相当于


linuxmi = change("fake")(linuxmi)
linuxmi()


其实函数名此时发生了改变


linuxmi.__name__的值为she


解决办法为使用functools.wraps


import functools


def change(a):
    def linuxidc(f):
        @functools.wraps(f)
  &n

bsp;     def she():
            print("I'm a linuxidc")
            f()
            print("you're not ,you're {} linuxidc".format(a))
        return she
    return linuxidc


def linuxmi():
    print("I'm a linuxmi")


if __name__ == "__main__":
    linuxmi = change("fake")(linuxmi)
    linuxmi()



编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇编译第一个ROS程序 - Hello ROS 下一篇ROS小乌龟turtlesim详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }