一、Java @XXX:
Annotation 注解(只有成员变量,没有方法,自定义注解 public @interface MyTag{xxx})
(这个简洁)
https://blog.csdn.net/m0_57598508/article/details/128310089
https://blog.csdn.net/weixin_43748564/article/details/107375850
(有点长,很详细,我没看完)
https://blog.csdn.net/weixin_42525343/article/details/114510771
二、python @XXX:
表示修饰符 就是一个函数 (还表示矩阵乘法)
内部结构:返回函数的函数
(这个讲的很细,收藏,看这个能看懂使用多个装饰器的执行顺序)
https://blog.csdn.net/qq_44444503/article/details/124754108
https://www.py.cn/jishu/jichu/26907.html
装饰器 像一个注入符号:有了它,拓展了原来函数的功能既不需要侵入函数内更改代码,也不需要重复执行原函数
引用案例:
def dec1(func):
print("1111")
def one():
print("2222")
func()
print("3333")
print("4444")
return one
def dec2(func):
print("aaaa")
def two():
print("bbbb")
func()
print("cccc")
print("dddd")
return two
@dec1
@dec2
def test():
print("test test")
test()
'''
引用:(这个讲的很细,看这个能看懂使用多个装饰器的执行顺序)
https://blog.csdn.net/xiangxianghehe/article/details/77170585?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165242741716781432972636%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165242741716781432972636&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-77170585-null-null.142%5Ev9%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=%E8%A3%85%E9%A5%B0%E5%99%A8&spm=1018.2226.3001.4187
aaaa
dddd
1111
4444
2222
bbbb
test test
cccc
3333
解释一:
dec1(dec2(test()))
从右到左方向,执行外层 dec2-》dec1 输出 ad 14;然后 从左到右方向,执行返回函数
解释二:
dec1(dec2(test()))
(由内到外) 执行顺序:
先执行 dec2(test) 中 dec2 输出 ad, 然后 把 参数函数func 指向test 返回函数two
这时 dec2(test) 变成 ad two 注: func()=test()
则 dec1(dec2(test())) = ad dec1(two 注: func()=test())
先执行 dec1(two) 中 dec1 输出 14, 然后 把 参数函数func 指向two 返回函数one
这时 dec1(two) 变成 ad14 one two 注: func()=test()
则 dec1(dec2(test())) = ad14 one two 注: func()=test()
所以ad14 2b t c3 这里可以想象 func 放入two里,然后two放入one里 然后顺序执行
'''
def test(func):
print("1 这里是 test 方法")
def one():
print("2 这里是 one 方法")
func()
print("3 这里是 one 方法")
print("4 这里是 test 方法")
return one
@test
def try03():
print("5 这里是 try03 方法")
try03()
'''
1 这里是 test 方法
4 这里是 test 方法
2 这里是 one 方法
5 这里是 try03 方法
3 这里是 one 方法
类似 test(try03()) 执行顺序:执行test 方法 , 输出 14 , 把 参数函数func 指向 try03函数 返回 函数one ,输出253
'''