zoukankan      html  css  js  c++  java
  • python装饰器使用详解

    装饰器

    '''
    装饰器:就是闭包(闭包的一个应用场景)
    -- 把要被装饰的函数作为外层函数的参数通过闭包操作后返回一个替代版函数

    优点:
    -- 丰富了原有函数的功能
    -- 提高了程序的可拓展性
    '''

     

    开放封闭原则

    '''
    1.不能修改被装饰对象(函数)的源代码
    2.不能更改被修饰对象(函数)的调用方式
    '''

     

    装饰器的简单实现

    def outer(func):
       def inner():
           print("新增功能1")
           func()
           print("新增功能2")
       return inner

    def func():
       print("原有功能")
       
    func = outer(func)

     

     

    装饰器语法糖

    def outer(func):
       def inner():
           print("新增功能1")
           func()
           print("新增功能2")
       return inner

    @outer
    def func():
       print("原有功能")

     

     

    装饰有参有返的函数

    def outer(func):
       def inner(*args, **kwargs):
           print("新增功能1")
           result = func(*args, **kwargs)
           print("新增功能2")
           return result
       return inner

    @outer
    def func(*args, **kwargs):
       print("原有功能")
       return "原有结果"
       

     

     

    有参装饰器

    def wrap(arg):
       def outer(func):
           def inner(*args, **kwargs):
               print("新增功能1")
               result = func(*args, **kwargs)
               print("新增功能2")
               return result
           return inner

    @wrap("装饰器参数")
    def func(*args, **kwargs):
       print("原有功能")
       return "原有结果"

     

    wraps修改函数文档注释

    from functools import wraps
    def outer(func):
       @wraps(func)
       def inner(*args, **kwargs):
           '''装饰器文档注释'''
           func(*args, **kwargs)
       return inner

    @outer
    def func(*args, **kwargs):
       '''原有文档注释'''
       print("原有功能")

     

  • 相关阅读:
    列举⼀下 HTTP 中关于 "资源缓存" 的头部指令 (Head) 有哪些 ? 并简要介绍⼀下设置的规则 ?
    从输入URL到页面渲染完成
    git删除远程仓库分支
    @font-face的format属性
    【React】的行内样式不支持rgb
    前端面试题
    常见元素居中的五种方法
    数组存储表格数据
    java.util.Arrays类
    for-each循环
  • 原文地址:https://www.cnblogs.com/dongxixi/p/10648957.html
Copyright © 2011-2022 走看看