美文网首页python
简单的装饰器理解

简单的装饰器理解

作者: 燃燃的爸爸 | 来源:发表于2019-02-23 22:30 被阅读0次
import time


def foo():
    start = time.time()
     time.sleep(2)
     print('foo')
     end = time.time()
     print('spend %d' % (end-start))
 foo()
1.需求算函数时间,通过改造函数来完成
2.设想如果有很多函数并且这个函数有很多人调用,如果贸然去改造将很有可能影响其他业务
3.利用装饰器来实现,请看
def foo():
    time.sleep(2)
    print('foo....')


def show_time(f):
    def inner():
        start = time.time()
        f()
        end = time.time()
        print('spend %s' % (end-start))
    return inner


a = show_time(foo)
a()

那么将要给大家看下python的优雅方法。

def show_time(f):
    def inner():
        start = time.time()
        f()
        end = time.time()
        print('spend %s' % (end-start))
    return inner


@show_time #等同于foo = show_time(foo)
def foo():
    time.sleep(2)
    print('foo....')


foo() #上面已经申明所以在这里可以直接调用

演示函数带参数

def show_time(f):
    def inner(x, y):
        start = time.time()
        f(x, y)
        end = time.time()
        print('spend %s' % (end-start))
    return inner


@show_time  # add = show_time(add)
def add(x, y):
    print(x+y)
    time.sleep(1)


add(1, 2)

那么函数用*agrs应该都可以依样画葫芦了。
那么问题就来了,如果给这个装饰器再加上个参数,比如这个例子的时间输出再有需要的时候输出,一般情况不需要输出,如何做呢?
下面我们来看例子:

def logger(flag):
    def show_time(f):
        def inner(x, y):
            start = time.time()
            f(x, y)
            end = time.time()
            if flag == 'true':
                print('spend %s' % (end-start))
        return inner
    return show_time


@logger('true')  # 等同于show_time,那么这样就把true给传入进去了。add = logger('true')(add)
def add(x, y):
    print(x+y)
    time.sleep(1)


add(1, 2)

相关文章

  • 简单的装饰器理解

    1.需求算函数时间,通过改造函数来完成 2.设想如果有很多函数并且这个函数有很多人调用,如果贸然去改造将很有可能影...

  • Python 装饰器简单理解

    装饰器的作用  首先来理解一下装饰器的作用:扩展原函数的功能。使用装饰器的一个好处就是能够不改变原函数代码同时还能...

  • Python 装饰器

    目录 函数简单的装饰器 函数 理解装饰器前,你首先需要理解函数是如何工作的; 函数是一级对象(first-clas...

  • Python装饰器的简单理解

    没别的意思,稍微记录一下Python装饰器的简单理解 对Python语法尤其是对函数式编程不太熟悉的话可能理解Py...

  • Python中的Decorator装饰器

    Decorator 装饰器 理解decorator(装饰器)的关键, 在于理解在python中函数是第一公民, 并...

  • Python中装饰器的使用

    简单装饰器 这里输出结果如下: 而这里的话,我们去理解到底发生了什么可以用代码去考量,我们使用了装饰器的语法糖,@...

  • 装饰器详解

    装饰器基本写法: 高级一点的装饰器 带参数的装饰器和类装饰器属于进阶的内容。在理解这些装饰器之前,最好对函数的闭包...

  • Python-迭代器

    一、装饰器 开放封闭原则 装饰器的简单实现 装饰器语法糖 装饰有参有返的函数 有参装饰器 wraps修改函数文档注...

  • [JS函数] 方法 this

    函数 方法 新的东西: 多多理解一下this。 apply和装饰器好理解,apply用于指定this的指向,装饰器...

  • 装饰器的理解

    装饰器:1.用于装饰其他函数2.增强被装饰函数的功能装饰器需要接受一个函数对象作为参数,以对其进行增强 test_...

网友评论

    本文标题:简单的装饰器理解

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