装饰器前戏ide
import time def bar(): time.sleep(3) # 睡3秒 print("in the bar") def test1(func): print("in the test1") return func bar=test1(bar) # 把bar函数的内存地址传给test1函数(func参数接受bar内存地址),test1函数再returne返回内存地址,再赋值给bar变量 bar()# bar变量(内存地址)加()就成了函数运行
装饰器小高潮
函数
未加装饰器前代码code
def test1(): time.sleep(3) #睡3秒 print("in the test1") def test2(): time.sleep(3) print("in the test2") test1() test2()
加上装饰器后内存
import time def timer(func): def deco(): start_time = time.time() # 获取当前系统时间 (内容开始时间) func() stop_time = time.time() # 获取当前系统时间 (内容结束时间) print("运行时间为:%s"%(stop_time-start_time)) return deco @timer # @timer = test1=timer(test1) def test1(): time.sleep(3) #睡3秒 print("in the test1") @timer def test2(): time.sleep(3) print("in the test2") test1() test2()
装饰器高潮
input
user,password = "lt","111" def login(login_type): print("login:",login_type) def user_login(func): def loging(*ages, **kwargs): print("*ages, **kwargs:", *ages, **kwargs) if login_type =="local": Username = input("用户名:") Password = input("密码:") if user == Username and password == Password: print("登录成功!") return func(*ages, **kwargs) else: print("登录失败!") elif login_type == "ldap": print("我是ldap") return loging return user_login def index(): print("这里是首页index") @login(login_type="local") def home(name): print("这里是我的页home",name) return "我是返回的数据" @login(login_type="ldap") def bbs(): print("这里是论坛页bbs") index() print(home(user)) bbs()