zoukankan      html  css  js  c++  java
  • python装饰器简单使用

    装饰器和闭包关联很大,要先明白闭包是什么

    原始代码:

    def foo():
        print('fcc')

     增加装饰器

    from time import ctime,sleep
    def w(fcc):
        def inner():
            print("%s called %s" % (fcc.__name__,ctime()))
    
            fcc()
        return inner
    
    @w
    def foo():
        print('fcc')

     调用foo(),结果为:

    foo called Fri Mar 15 16:41:29 2019
    fcc

    可以看到,在不修改foo函数的前提下,增加了foo函数被调用时的执行过程

    @w内部执行的过程

    1、执行w函数,并将@w下的函数作为w函数的参数:

      @w等价于w(foo)

      返回w的内部函数inner(),

       即:

      def inner():
            print("%s called %s" % (fcc.__name__,ctime()))
    
            fcc()

     2、执行w函数后的返回值

      将执⾏完的w1函数返回值 赋值 给@w1下⾯的函数的函数名f1 即将w1

      的返回值再重新赋值给 f1

       新fcc = def inner():

            print("%s called %s" % (fcc.__name__,ctime()))

            fcc()

      这样,执⾏ fcc 函数时,就会执⾏ 新fcc 函数,在新fcc
      函数内部先执⾏装饰器的内容,再执⾏原来的fcc函数,然后将原来fcc函数的返回
      值返回给了调用者

     装饰器的作用:

    1. 引⼊⽇志
    2. 函数执⾏时间统计
    3. 执⾏函数前预备处理
    4. 执⾏函数后清理功能
    5. 权限校验等场景
    6. 缓存

  • 相关阅读:
    常用模块
    递归函数
    内置函数与匿名函数
    Mac控制台相关操作
    Maven相关知识记录
    @Import底层实现原理
    spring循环依赖
    springcloud注册中心对比
    分布式事务
    Drools使用注意事项
  • 原文地址:https://www.cnblogs.com/wbw-test/p/10538599.html
Copyright © 2011-2022 走看看