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. 缓存

  • 相关阅读:
    将一个类的Lambda转换成另一个类的研究
    欧拉计划 第10题
    C#4.0泛型中的out使用
    WP7应用开发笔记(4) 圆形滑动控件实现
    欧拉计划 第6题
    欧拉计划 第一题
    助手系列之python的FTP服务器
    Visual C++ 2008进行MySQL编程
    通过FTP命令上传下载
    助手系列之连接mysql数据库
  • 原文地址:https://www.cnblogs.com/wbw-test/p/10538599.html
Copyright © 2011-2022 走看看