zoukankan      html  css  js  c++  java
  • 装饰器

    定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能。

    原则:1.不能修改被装饰的函数的源代码;

               2.不能修改被装饰函数的调用方式。

    理解装饰器需理解一下三点:

    1.函数即变量

      函数同其他变量一样,在声明的时候都是把内容(字符串的形式)放进内存中,函数名(变量名)作为此内容的“门牌号”。

    2.高阶函数

    3.嵌套函数

    最简单的装饰器案例

    #coding=utf-8
    
    import time
    
    def decorator(func):
        def wrapper():
            start_time = time.time()
            func()
            end_time = time.time()
            print '执行所花时间:', end_time - start_time
        return wrapper
    
    @decorator # 相当于test = decorator(test)
    def test():
        print '执行...'
        time.sleep(3)
    
    test()

    被装饰的函数传参

    #coding=utf-8
    
    import time
    
    def decorator(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            func(*args, **kwargs)
            end_time = time.time()
            print '执行所花时间:', end_time - start_time
        return wrapper
    
    @decorator # 相当于test = decorator(test) = wrapper  => test() = wrapper()
    def test(second):
        print '执行...'
        time.sleep(second)
    
    test(1)

    装饰器传参(再最外面再加一层)

    #coding=utf-8
    
    import time
    
    def decorator(show_time):
        def out_wrapper(func):
            def wrapper(*args, **kwargs):
                start_time = time.time()
                func(*args, **kwargs)
                end_time = time.time()
                print '执行所花时间:', end_time - start_time
                if show_time:
                    print '当前时间:', time.strftime("%Y-%m-%d %X", time.localtime())
            return wrapper
        return out_wrapper
    
    @decorator(True)
    def test(second):
        print '执行...'
        time.sleep(second)
    
    test(1)
  • 相关阅读:
    自主学习之RxSwift(一) -----Driver
    RxSwift:ReactiveX for Swift 翻译
    C简单实现动态顺序表
    C简单实现双向链表
    C实现单链表
    享受这一点点的平淡
    C文件读写
    大神都在看的RxSwift 的完全入坑手册
    字符串常量存在何处
    认识自己
  • 原文地址:https://www.cnblogs.com/allenzhang-920/p/8900128.html
Copyright © 2011-2022 走看看