4.2 day12 装饰器-带参数

# 调用函数的时候,日志写入时间姓名函数功能
def func1():
    '''
    此函数是完成登录的功能,参数分别是...作用...
    :return #返回值是(true,false)登录成功与否
    '''
    print(666)
    print(func1,__name__)
    print(func1.__doc__)
    return True
func1()
带参数的装饰器
import time
def timer(flag):
    def wrapper(f): #f=func1
        def inner(*args,**kwargs):#聚合
            if flag:
                start_time = time.time()
                ret=f(*args,**kwargs) #打散1,2,3
                time.sleep(0.3)
                end_time=time.time()
                print('此函数的执行效率是 %f' % (end_time - start_time))
            else:
                ret = f(*args, **kwargs)
            return ret
        return inner
    return wrapper

flag = True
@timer(flag) #两步:1.timer(flag)-》wrapper 2.@wrapper
def func1():
    print(666)

@timer(flag)
def func2():
func1()
func2()
a=5
def func1():
    a+=1
    print(a)
func1()
报错,如果中间加global a可以引用全局作用域
a=5
def func1():
    global a
    a+=1
    print(a)
func1()

# 多个装饰器装饰一个函数
def wrapper1(func):
    def inner1():
        print('wrapper1,before func')
        func()
        print('wrapper1,after func')
    return inner1


def wrapper2(func): #func=inner1
    def inner2():
        print('wrapper2,before func')
        func()
        print('wrapper2,after func')
    return inner2

@wrapper2  #f=wrapper2(f) 里面的f==inner1 外面的f->inner 2
@wrapper1 #f=wrapper1(f) 里面的f是函数名 外面的f是inner1
def f():
    print('in f')
f()

 




posted on 2018-04-02 12:20  欣蔚  阅读(103)  评论(0编辑  收藏  举报