Python 装饰器

复制代码
#函数装饰器 &实现函数重载  &functools.wraps回源
#装饰器实现效果:可以在不改变原函数内部代码和调用方式的前提下,实现在函数执行和执行扩展功能。
#适用场景:多个函数系统统一在执行前后自定义一些功能。
import functools
def outer(fun):  #fun=func1
    @functools.wraps(fun)
    #加了以后,被装饰的函数使用.__name__或者.__doc__的时候就是它自己
    #若是不加,被装饰的函数使用nd的时候就指向装饰它的函数里面的方法
    def inner(*args, **kwargs):  #装饰器里面有个新函数用来“装饰”
        """"一只大螃蟹"""
        if len(args) == 1:
              print('before-1')
              res = fun(*args, **kwargs)
              print('after-1')
              return res
        else:
              print('before-2')
              res=fun(*args, **kwargs)
              print('after-2')
              return res
    return inner  #把装饰好的东西返回

@outer      #把下面的func1 当作参数传到outer函数里面
def func1(*args):
    """我爱你宝贝"""
    value=(11, 22, 33)
    print('func1函数',value)


func1()
#func1(5)
#func1(5,6)
print(func1.__name__)
print(func1.__doc__)
复制代码

 

建议背会的装饰模板

复制代码
import functools

def outer(fun):
    @functools.wraps(fun)  #__name__   __doc__  回源
    def inner(*args, **kwargs):
        # 执行前
        res = fun(*args, **kwargs)
        #执行后
        return res
    return inner

@outer
def func(*args):
    pass

func()
复制代码

 

装饰器应用场景列举:网站界面区分是否需要登录

 

posted @   磕伴  阅读(36)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示