装饰器总结
import time
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了大安免费建站欢迎大家使用!
装饰器定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能
装饰器元祖:1、不能修改被装饰的函数源代码。 2、不能修改不装饰的函数的调用方式。
装饰器 函数内存地址不变,函数名变了其结果不变!!!
def timmer(func): # 这就是装饰器!
def warpper(*args,*kwargs):
start_time = time.time()
func(args,**kwargs)
stop_time = time.time()
print("the func run time is %s" % (stop_time - start_time))
return warpper
@timmer #函数的内存地址赋予(把timmer这个装饰器的内存地址给调用他的函数)
def test():
time.sleep(3)
print("test1")
test()
实现装饰器的知识储备:
1.函数即“变量”
2.高阶函数:1、把一个函数名当做实参传给另外一个函数(在不修改被装饰函数
源代码的情况下为其添加功能)
2、返回值中包含函数名(不修改函数的调用方式)
3.函数嵌套
高阶函数+嵌套函数=》装饰器
先声明定义再调用!!!
#1
def fff():
print("llllllll")
xxx()
def xxx():
print("ccococococ")
fff()
#2
def xxx():
print("ccococococ")
def fff():
print("llllllll")
xxx()
fff()
#3 调用xxx的时候后,xxx没有先定义!
def fff():
print("llllllll")
xxx()
fff()
def xxx():
print("ccococococ")
实现不改变源代码附加功能!!
def timmer(func): # 这就是装饰器!
def warpper():
start_time = time.time()
func()
stop_time = time.time()
print("the func run time is %s" % (stop_time - start_time))
return warpper
def test():
time.sleep(3)
print("test1")
timmer(test)
实现不改变源代码和调用方式附加功能!!!
def timmer(func): # 这就是装饰器!
def warpper():
start_time = time.time()
func()
stop_time = time.time()
print("the func run time is %s" % (stop_time - start_time))
return warpper
@timmer #函数的内存地址赋予(把timmer这个装饰器的内存地址给调用他的函数)
def test():
time.sleep(3)
print("test1")
test()
带参数给装饰器!
def timmer(func): # 这就是装饰器!
def warpper(*args,*kwargs):
start_time = time.time()
func(args,**kwargs)
stop_time = time.time()
print("the func run time is %s" % (stop_time - start_time))
return warpper
@timmer #函数的内存地址赋予(把timmer这个装饰器的内存地址给调用他的函数)
def test(): # @timmer=test
time.sleep(3)
print("test1")
test("alex")
最高级的装饰器
user,keypass="hy","123"
def xxxx(func):
def wapper(*args, *kwargs):
username = input("username:").strip()
pasword = input("pssword:").strip()
if user == username and keypass == pasword:
print("welcome to logging---。。。。")
rrs = func(args, **kwargs)
return rrs
else:
print("username or passord is no")
return wapper
def index():
print("welcome to index")
return 0@xxxx
br/>@xxxx
print("welcome to home ")
return "alex is pig " # 函数的返回值需要输出,home()调用不会输出返回值。@xxxx
br/>@xxxx
print("welcome to bbs")
index()
print(home())
bbs()
最终级的装饰器
user,passwd="alex","123"
def auth(aupe):
def out_warpper(func):
def wrapper(*args, *kwargs):
if aupe == "local":
username = input("username:").strip()
password = input("password:").strip()
if user == username and passwd == password:
print("\033[32;1muser has passed authentication\033[0m")
res = func(args, **kwargs)
return res
else:
print("\033[32;1mInvalid username or password\033[0m")
elif aupe == "country":
print("搞毛线ldap,不会")
else:print("city 欢迎你")
return wrapper
return out_warpper@auth(aupe="city")
br/>@auth(aupe="city")
print("welcome to city!")@auth(aupe="country")
br/>@auth(aupe="country")
print("welcome to country!!")@auth(aupe="local")
br/>@auth(aupe="local")
print("welcome to home!!! %name")
acct=acc-name
return "from there",acct
city()
country()
local()
print(local())# 函数的返回值需要print函数的调用(local()),或者赋值给一个变量,输出那个变量!
文章标题:装饰器总结
文章出自:http://myzitong.com/article/psdoec.html