python-函数-装饰器

开放封闭原则:

可以为函数增加功能,但不能更改原函数;

import time

1)无参

import time


def show_time(f):
    def inner():
        s = time.time()
        f()
        e = time.time()
        print(e-s)
    return inner

@show_time  #foo = show_time(foo)
def foo():
    print("foo")
    time.sleep(2)

#foo = show_time(foo)
foo()

2)为功能函数增加参数

def show_time(f):
    def inner(*x,**y):
        s = time.time()
        f(*x,**y)
        e = time.time()
        print(e-s)
    return inner

@show_time #foo = show_time(foo)
def foo(*args,**kwargs):
    sums = 0
    for i in args:
        sums+= i
    print("sums",sums)
    time.sleep(2)

#foo = show_time(foo)
foo(1,2,3)

3)为装饰器增加参数

def logger(flag = ''):
    def show_time(f):
        def inner(*x,**y):
            s = time.time()
            f(*x,**y)
            e = time.time()
            print(e-s)
            if flag == 'true':
                print('logger')
        return inner
    return show_time

@logger('true') #相当于@showtime,由于闭包的原因有了flag参数
def foo(*args,**kwargs):
    sums = 0
    for i in args:
        sums+= i
    print("sums",sums)
    time.sleep(2)

#foo = show_time(foo)
foo(1,2,3)

猜你喜欢

转载自www.cnblogs.com/zzm-blog/p/10101989.html