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)

  • 相关阅读:
    .a包生成64位
    iOS教程
    iOS 难题解决日志------2层控制器 上面的控制器显示透明
    企业级的App发布流程
    如何从oc中去获取一个私有的变量.....
    iOS app的破解原理,就是去除已付费的账户信息的原理是什么?
    Could not launch "app_name"
    GCD时间轴
    Win8自动更新怎么关闭 取消Win8自动更新
    python3 elf文件解析
  • 原文地址:https://www.cnblogs.com/Peter2014/p/11264833.html
Copyright © 2011-2022 走看看