Python 装饰器

修饰器定义了新的本地函数,该函数将调用原始函数
一、函数修饰器

1、原始版

def positive_result(function):
    def wrapper(*args, **kwargs):      
         result = function(*args, **kwargs)
         assert result >=0 , function.__name__+ "() result isn't >=0 "
         return result
    wrapper.__name__ == function.__name__
    wrapper.__doc__ == function.__doc__
    return wrapper

2、优化v1, 使用functools简化,只是简单装饰器,装饰器本身无法传入参数

import functools
def positive_result(function):
     @functools.wraps(function)
     def wrapper(*args, **kwargs):
             print(args)
         result = function(*args, **kwargs)
         assert result >=0 , function.__name__+ "() result isn't >=0 "
         return result
     return wrapper

3、修饰器参数化,类似于@bounded(0, 5)

def bounded(minimum, maximum):
    def decorator(function):
        @functools.wraps(function)
        def wrapper(*args, **kwargs):
            result = function(*args, **kwargs)
            if result < minimum:
                return minimum
            elif result > maximum:
                return maximum
            return result
        return wrapper
    return decorator
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 部分细节自己改了点,也加了点自己例子,基本上属于转载。转载出处:https://my.oschina.net/le...
    洛克黄瓜阅读 6,060评论 0 3
  • Python装饰器 定义了一个函数 想在运行时动态增加功能 又不想改动函数本身代码 通过高阶函数返回新函数 如何调...
    Dozing阅读 2,350评论 0 0
  • 虽然人们能利用函数闭包(function clouser)写出简单的装饰器,但其可用范围常受限制。多数实现装饰器的...
    gomibako阅读 4,605评论 0 4
  • Python 中的函数和 Java、C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个...
    stoneyang94阅读 5,164评论 1 4
  • 三年前完成的一幅钢笔画,搁置在橱顶太长时间,今天清理物品时又给倒腾出来了。这算是一幅主题创作了,用钢笔、黑水笔,以...
    风雨下的漫行者阅读 4,112评论 0 5