• 技术文章 >后端开发 >Python教程

    python 装饰器

    大家讲道理大家讲道理2017-08-19 14:47:35原创1482
    之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器.

    先看下代码:


    import time# 将函数作为参数传入到此方法....def timeif(func):    def wrapper(arg):        print("in wrapper() %s" % (arg))
            start = time.clock()
            func(arg)
            end = time.clock()        print("used: %s %s" % (end-start, arg))    return wrapper
    
    
    @timeifdef foo(arg):    print("in foo() %s" % (arg))if __name__ == '__main__':
        foo(" Hello ")  # 表示执行foo函数....


    我的疑惑就是明明return 的是一个函数名,按道理来讲,返回的就是一个函数地址啊!我理解有问题?随后上网查资料,又是闭包....但是我个人对它不感冒,随后自己分析,总结出了一段程序,看完你就知道原因了.
    程序:


    # coding=utf-8# 带参数的函数  返回一个函数地址就行....def funX(x):    def funY():        return x    return funY# 不带参数的函数....def funX1():    print("调用函数funX1")    def funY1():        print("调用函数funY1")    return funY1if __name__ == '__main__':    # print(funX(5)())  # 调用有参数的嵌套函数...
        
        print(funX1()())  # 调用无参数的嵌套函数...


    这和我们的装饰器不像吗?这就是我们的装饰器!因此,我们可以按照上面的程序来理解,也就是说它是首先确定参数个数,随后分别传入的,下面,我们来改写代码:


    # coding=utf-8import time# 将函数作为参数传入到此方法....def timeif(func):    def wrapper(arg):        print("in wrapper() %s" % (arg))
            start = time.clock()
            func(arg)
            end = time.clock()        print("used: %s %s" % (end-start, arg))    return wrapper# @timeifdef foo(arg):    print("in foo() %s" % (arg))if __name__ == '__main__':
        timeif(foo)(' Hello')


    php入门到就业线上直播课:进入学习

    以上就是python 装饰器的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:python 装饰
    上一篇:Python装饰器之property用法详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Python NumPy教程之数据类型对象• 使用Python处理KNN分类算法• Python标准库中的logging用法示例• python发腾讯微博代码分享• 在Django的视图(View)外使用Session的方法
    1/1

    PHP中文网