# 作业
# FLAG=False
# def login(func):
# def inner(*args,**kwargs):
# global FLAG
# lis=[]
# if FLAG:
# ret = func(*args, **kwargs)
# return ret
# else:
# username=input('请输入用户名:')
# password=input('请输入密码:')
# with open('userlist',encoding='utf-8') as f:
# for line in f:
# lis.append(line)
# if username==lis[0].strip() and password==lis[1].strip():
# print('恭喜你登陆成功')
# FLAG=True
# ret=func(*args,**kwargs)
# return ret
# else:print('登陆失败!')
# return inner
#
#
# @login
# def shoplist_add():
# print('增加一个物品')
# @login
# def shoplist_del():
# print('删除一个物品')
#
# shoplist_add()
# shoplist_del()
# def log(func):
# def inner(*args,**kwargs):
# ret=func(*args,**kwargs)
# with open('userlist','a',encoding='utf-8') as f:
# f.write('{}\n'.format(func.__name__))
# return ret
# return inner
#
# @log
# def shoplist_add():
# print('增加一个物品')
# @log
# def shoplist_del():
# print('删除一个物品')
# shoplist_add()
# shoplist_del()
import time FLAG=False def time_out(flag): def timmer(func): def inner(*args,**kwargs): if flag: start=time.time() ret=func(*args,**kwargs) end=time.time() print(start-end) return ret else: ret = func(*args, **kwargs) return ret return inner return timmer @time_out(FLAG) def wahaha(): time.sleep(0.1) print('whaaaaaaaa') wahaha() @time_out(FLAG) def erguotou(): time.sleep(0.1) print('erguotoutoutou') erguotou()
#多个装饰器装饰一个函数 套娃现象
def wrapper1(func): #func---->inner2
def inner1():
print('wrapper1,before func')
ret=func() #func()---->inner2()
print('wrapper1,after func')
return ret
return inner1
def wrapper2(func): #func---->f
def inner2():
print('wrapper2,before func')
ret=func() #func()----f()
print('wrapper2,after func')
return ret
return inner2
# def wrapper3(func):
# def inner3():
# print('wrapper3,before func')
# ret=func()
# print('wrapper3,after func')
# return ret
# return inner3
@wrapper1 #---->f=wrapper1(f) warpper1(f)---->inner1()
@wrapper2 #---->f=wrapper2(f) f---->inner2
# @wrapper3
def f():
print('my is f')
return '蒙了吧,哈哈哈!'
print(f())
#执行的结果:
wrapper1,before func
wrapper2,before func
my is f
wrapper2,after func
wrapper1,after func
蒙了吧,哈哈哈!