美文网首页
python 装饰器学习

python 装饰器学习

作者: 冬瓜1992 | 来源:发表于2018-03-27 03:20 被阅读0次

最简单的装饰器

本质上,decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decorator,可以定义如下:

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

典型的例子

廖雪峰的课程里的习题:在函数执行之后,打印出执行的时间

import time
import functools

def metric(fn):
    @functools.wraps(fn)
    def wrapper(*args, **kw):
        start = time.time()
        ret = fn(*args, **kw)
        end = time.time()
        print('%s executed in %s ms' % (fn.__name__, (end - start) * 1000))
        return ret
    return wrapper

# 测试
@metric
def fast(x, y):
    time.sleep(0.0012)
    return x + y;

@metric
def slow(x, y, z):
    time.sleep(0.1234)
    return x * y * z;

f = fast(11, 22)
s = slow(11, 22, 33)
if f != 33:
    print('测试失败!')
elif s != 7986:
    print('测试失败!')

带参数的装饰器

如果decorator本身需要传入参数,那就需要编写一个返回decorator的高阶函数,写出来会更复杂。比如,要自定义log的文本:

import time

def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator


@log("calling: ")
def fast(x, y):
    time.sleep(0.0012)
    return x + y;

fast(1, 2)

装饰器的用处

有一个概念叫【面向切面编程】,一个最典型的例子就是需要在一系列函数运行时,增加一条日志。如果把加日志的代码直接放到目标函数里,工作量大,而且后期不好维护。使用装饰器开源很方便的

相关文章

  • 装饰器模式

    介绍 在python装饰器学习 这篇文章中,介绍了python 中的装饰器,python内置了对装饰器的支持。面向...

  • python中的装饰器

    python装饰器详解 Python装饰器学习(九步入门) 装饰器(decorator) 就是一个包装机(wrap...

  • TypeScript: 类的装饰器(三)

    带参数的类的装饰器 学习 python 的同学应该知道,python 中也有装饰器,而且 python 中的众多框...

  • Python装饰器学习

    Python装饰器学习 Python装饰器学习(九步入门)基础部分根据此文来学习的,接下来将根据此文内容进行整理,...

  • python装饰器

    最近在学习python3,对于python的装饰器,多线程以及异步IO有点卡顿。这两天在研究python的装饰器,...

  • 什么是Python装饰器?看小编手把手教学

    讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切。 学习Python中有不明白推荐加...

  • python--装饰器--测试程序运行次数以及程序运行时间

    python的装饰器应用极其广泛,在python--学习的章节有所描述,在这里写两个常用的装饰器。 测试程序运行次...

  • [译] Python装饰器Part II:装饰器参数

    这是Python装饰器讲解的第二部分,上一篇:Python装饰器Part I:装饰器简介 回顾:不带参数的装饰器 ...

  • Python ☞ day 5

    Python学习笔记之 装饰器& 偏函数 & 异常处理 & 断言 & 文件读写 &编码与解码 装饰器 概念:是一个...

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

网友评论

      本文标题:python 装饰器学习

      本文链接:https://www.haomeiwen.com/subject/fxtjcftx.html