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

    python装饰器的深入浅出

    黄舟黄舟2017-10-01 07:44:05原创756
    这篇文章主要和大家一起深入浅出的学习python装饰器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器.

    先看下代码:


    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
    
    
    @timeif
    def 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 funY1
    
    
    if __name__ == '__main__':
      # print(funX(5)()) # 调用有参数的嵌套函数...
      
      print(funX1()()) # 调用无参数的嵌套函数...

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


    # coding=utf-8
    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
    
    
    # @timeif
    def foo(arg):
      print("in foo() %s" % (arg))
    
    
    if __name__ == '__main__':
      timeif(foo)(' Hello')

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python 深入浅出 装饰
    上一篇:Python中高阶函数以及函数装饰器的解析 下一篇:Python3实战爬虫之爬取京东图书的图文详解
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• Python接口自动化测试必备基础之http协议详解• Python 3.11中的最佳新功能和功能修复• 实例详解Python面向对象的四大特征• Python数据分析之concat与merge函数(实例详解)• 一起聊聊Python的编码样式
    1/1

    PHP中文网