Java和python中 @ 符号

一、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/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

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
'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值