装饰器总结
admin
2023-07-20 00:21:47
0

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()),或者赋值给一个变量,输出那个变量!

相关内容

热门资讯

凤凰晚报丨释永信为何数罪并罚? 今日人物【释永信为何数罪并罚?】2026年5月29日,河南省新乡市中级人民法院一审公开宣判被告人刘应...
“完全胜利”变“战略止损”,特... 编者按当地时间6月17日,美国与伊朗正式确认签署14点谅解备忘录。与此前流传的草案相比,14点正式文...
华为、寒武纪带头,国产芯片玩家... 文源 | 源媒汇 作者 | 谢春生 国产GPU的头部牌桌上,正在悄悄“加人”。 近来,据媒体报道,字...
看不见的“通信网”究竟有多“新... 新一代通信网是国家规划建设的“六张网”的重要组成部分,它对低空经济的重要性,也是这张网打通经济社会发...
原创 预... 叠加618年中大促后,有5款千元机值得强烈推荐,起售价格从1032元到1299元,性价比和用户体验都...
几素科技申请无叶风扇专利,产生... 国家知识产权局信息显示,深圳市几素科技有限公司申请一项名为“一种无叶风扇”的专利,公开号CN1222...
扬言要查处花莲等地多个农会及农... 【环球网报道】据台湾联合新闻网6月18日报道,海峡论坛结束后,台陆委会扬言要对花莲、云林、南投、屏东...
高校毕业祝福语写成“前途亦烂烂... 据华商报大风新闻,近日,辽宁沈阳多名网友通过社交平台发帖称,当地一高校毕业季展板的宣传语写成了“人生...
俄罗斯和东盟加强合作,会否影响... 俄罗斯和东盟17日到19日在俄罗斯喀山举行峰会,纪念俄罗斯-东盟建立关系35周年。北京外国语大学区域...
查封保全的“全季酒店”被违法改... 澎湃新闻记者 王健西安市中心黄金地段的钟楼,人流密集商业发达,百米开外的西北方向,坐落着一栋名为鸿禧...