zoukankan      html  css  js  c++  java
  • Python-装饰器(Decorator)

    装饰器的思想

    装饰器是建立在Python中函数可以作为参数传递和返回的基础上,作用是对函数的功能和行为做扩充和延展,但是这个过程不会修改原函数的逻辑,所以叫装饰而不是修改。

    装饰器的基本实现逻辑:

    • 传入目标函数(func)
    • 创建新函数(Wrapper)
    • 在Wrapper中执行func同时添加扩展功能
    • 返回新函数Wrapper

    从逻辑中我们看出,装饰器的行为是用一个扩充过功能的新函数替换原函数,这个过程是在代码加载中完成的,被装饰过的函数实际上已经是装饰器返回的的新函数了。

    由于装饰器返回的新函数中元数据已经发生了变化,为了保持新函数元数据和旧函数相同,可以使用@functools.wraps(f)装饰新函数Wrapper。

    装饰器举例

    1. 不带参数的装饰器
    def decorator(f):
        @functools.wraps(f)
        def wrapper(*args, **kwargs):
            print("decorator without param")
            return f(*args, **kwargs)
        return wrapper
    
    @decorator
    def func(word):
        print("word is: " + word)
    
    

    @decorator是python语法糖,语法糖就是换一种方式执行既定的功能,@decorator等同于func = decorator(func)

    2. 带参数的装饰器
    def route(rule):
    
        def decorator(f):
            @functools.wraps(f)
            def wrapper(*args, **kwargs):
                print(rule)
                print("decorator with params")
                return f(*args, **kwargs)
            return wrapper
        return decorator
    
    @route('/app')
    def func(word):
        print("word is: " + word)
    

    @route('/app')等同于func = route('/app')(func)

  • 相关阅读:
    [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题
    输入法那没有小键盘的图标解决方法
    Chrome百度不显示中文字体
    转:数据库范式(1NF 2NF 3NF BCNF)
    转:海明纠错码
    奇阶魔方阵
    字符串的模式匹配
    红黑树
    排序算法总结
    关于面试总结9-接口测试面试题
  • 原文地址:https://www.cnblogs.com/Peter2014/p/11264833.html
Copyright © 2011-2022 走看看