python笔记之装饰器

python中函数的参数也可以是函数,在多个函数需要实现相同代码时也可以考虑使用装饰器进行处理。

假设以下场景,需要进行查询及查看个人主页操作,那么在此操作之前一般需要先登录系统,此时就可以将登录函数写成装饰器函数

 1 def login(fun): #装饰器函数格式,函数内层在定义一个函数,同时函数返回内层函数本身,相当于是执行内层函数msg
 2     def msg():
 3         print('登录成功')
 4         fun()
 5     return msg
 6 
 7 @login    #装饰器login
 8 def search1():  #一旦函数被装饰,自动执行装饰器函数login,且该函数相当于装饰器的参数
 9     print('查询成功')
10 
11 @login
12 def profile():
13     print('欢迎你查看个人主页')

以上代码,login为装饰器函数,search1、profile为被装饰器函数,详细的解释这个代码的意思:
1、自动执行login函数并且将被装饰的函数当作login函数的参数来处理
2、将login函数的返回值msg重新赋值给被装饰的函数
3、一旦结合了装饰器,调用被装饰的函数本质上是执行msg()函数
4、函数被装饰之后,被装饰的函数重新赋值给装饰器的内层函数

下面看一下被装饰函数有参数的情况

 1 def loginxt(fun):
 2     def msg(*args,**kwargs):
 3         r = fun(*args,**kwargs)
 4         if r:
 5             return r
 6     return msg
 7 
 8 @loginxt
 9 def order(name,pwd):
10     if name=='admin' and pwd=='123456':
11         return ('欢迎你登录系统')
12     else:
13         return ('请先登录系统')
14 
15 
16 print(order('admin','123456'))

猜你喜欢

转载自www.cnblogs.com/heertong/p/12128236.html