python 装饰器

 1 def func(func1):
 2     def add_func(a,b):
 3         print('lalala')
 4         return func1(a,b)
 5     return add_func
 6 
 7 
 8 def func1(x,y):
 9     print(x+y)
10 
11 
12 func(func1)(1,2)
13 
14 #上面的函数就等于
15 #@func
16 #def func1(x,y):
17 #     print(x+y)
18 #func1(1,2)

装饰器函数默认第一个参数是函数名

里面需要增加功能的函数的参数    是和传入进来函数的参数是一样的

一定要一 一对应  不然会报错

然后装饰器带参数的

 1 #装饰器函数带参数
 2 #出去玩,不出去玩
 3 def arg_func(arg):
 4     def _func(func):
 5         def _func1():
 6             if arg == 'good':
 7                 print('出去玩')
 8             if arg == 'bad':
 9                 print('不出去玩')
10             return func()
11         return _func1
12     return _func
13 #arg_func 装饰器函数的参数接收函数,因为装饰器函数只能是接收一个函数作为参数
14 #arg_func -> _func  接收我们装饰器函数的参数
15 #_func -> _func1 闭包函数 添加功能
16 #_func1 -> func 执行添加的功能,执行被装饰的函数 
17 
18 @arg_func('bad')
19 def func():
20     print('bad day')
21 
22 @arg_func('good')
23 def func1():
24     print('good day')
25 
26 func()
27 func1()

 

posted @ 2018-09-16 11:56  lonelyshy  阅读(107)  评论(0编辑  收藏  举报