• 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)

  • 相关阅读:
    php 处理并发问题
    phpstudy 版本切换注意的问题
    php读取文件内容的三种方法
    防止重复提交表单的两种方法
    php 压缩函数gzencode gzdeflate gzcompress
    回调函数解析
    回调函数
    如何卸载红蜘蛛
    无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法
    mysql 去除重复 Select中DISTINCT关键字的用法
  • 原文地址:https://www.cnblogs.com/Peter2014/p/11264833.html
Copyright © 2020-2023  润新知