语法糖:开心的语法
import time
#定义一个装饰器(使用语法糖后装饰器必须先定义,就是放在被装饰函数对象前面)
def outter(func):
def wrapper(*args,**kwargs):
start_time=time.time()
time.sleep(3)
res=func(*args,**kwargs)
stop_time=time.time()
print(stop_time-start_time)
return res
return wrapper
#在被装饰器对象正上方的单独一行写@装饰器名字
#如果不使用装饰器就注释掉,就恢复到了原函数了
@outter #index=outter(index)
def index(x,y):
time.sleep(3)
print("hahaha%s %s"%(x,y))
@outter #outter(将正下方home内存地址传进去,也就是home) #得到的结果重新赋值给原函数名 home=outter(home)
def home(name):
time.sleep(3)
print("hahaha%s" %name)
#偷梁换柱下
#home=outter(home) #是有语法糖后,偷梁换柱就可以省掉
home('llj')
#index=outter(index) #是有语法糖后,偷梁换柱就可以省掉
index(111,222)
总结无参装饰器模板
#wrapper内需要一个func,所以需要通过闭包函数传参。def outter(func): return wrapper
def outter(func):
def wrapper(*args,**kwargs): #1.调用原函数 2.为其增加新功能
res=func(*args,**kwargs) #func()参数要写活,所以func(*args,**kwargs)
return res
return wrapper
@outter
def index(x,y):
print("index...%s %s"%(x,y))
index(1,2)
userinfo1.txt
llj:123
liang:123
long:123
#编写认证功能的装饰器(实现账号密码的验证,账号密码验证成功后执行)
def auth(func):
def wrapper(*args,**kwargs): #1.调用原函数 2.为其增加新功能
Input_User=input("请输入账号:").strip()
Input_Pass = input("请输入密码:").strip()
with open('userinfo1.txt',mode="tr",encoding="utf-8") as tr:
for line in tr:
username,userpass=line.strip().split(":")
if Input_User == username and Input_Pass == userpass:
res=func(*args,**kwargs) #func()参数要写活,所以func(*args,**kwargs)
return res
else:
print("输入账号密码不合法!")
return wrapper
@auth
def index(x,y):
print("index...%s %s"%(x,y))
index(1,2)
#语法糖
@print('llj') #碰到@后面名字加括号就会运行功能 print打印llj pinrt会有一个返回值即None, 即@None 会报错.
def index():
pass