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("原有功能")

     

  • 相关阅读:
    为了你,我一定要写诗
    哈佛成功金句25则(看一遍,都会很有收获!)
    成功者的十三个“百万元习惯”
    商业领袖的7大人脉宝典
    我为你疯狂
    秋收,为何我收获的只有泪水
    又逢中秋月
    今宵谁与共
    26句话,让你豁然开朗
    田彩蝶(帮别人名字作诗)
  • 原文地址:https://www.cnblogs.com/dongxixi/p/10648957.html
Copyright © 2011-2022 走看看