装饰器
装饰器是为了在原有的代码基础上并不改变其内容而增加其他功能。
参考文章 http://lib.csdn.net/article/python/62942
语法格式
1 | def fun1(args): |
逻辑
1) @fun1相当于 test = fun1(test) 把test函数名作为参数给fun1函数 并赋值给test
2)fun1(test) 返回指定是fun2变量名,因此 test = fun2
3)执行test() 等执行fun2()里面的代码 其中执行args()等于 执行原来的test()的代码
1 | #!/usr/bin/python |
装饰器装饰带参数的函数
语法格式
1 | def fun1(args): |
1 | #!/usr/bin/python |
装饰器装饰带返回值的函数
语法格式
1 | def fun1(args): |
1 | #!/usr/bin/python |
带参数的装饰器
语法格式
1 | def fun1(args1) |
逻辑
1) @fun1(111)相当于把111作为实参来执行fun1函数 最后返回fun2
2) @fun2 相当于 test = fun2(test) 把test函数名作为参数给fun2函数 并赋值给test
3)fun2(test) 返回指定是fun3变量名,因此 test = fun3
4)执行test() 等执行fun3()里面的代码 其中执行args()等于 执行原来的test()的代码
1 | #!/usr/bin/python |
1 | #!/usr/bin/python |
多个装饰器
顺序是从上往下执行装饰器1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#!/usr/bin/python
# coding:utf-8
def zhuang1(fun):
def wrapper():
print('这是装饰器1')
fun()
return wrapper
def zhuang2(fun1):
def wrapper2():
print('这是装饰器2')
fun1()
return wrapper2
@zhuang1 # zhaung2=wrapper
@zhuang2 #test= zhuang2(test)= wrapper2
def test():
print(111)
test()
1 | 这是装饰器1 |