Python3 装饰器

装饰器(decorator):

  1>定义: 本质是函数,功能是用来装饰其他函数,为其他函数添加附加功能
  2>原则:(1)不能修改被装饰函数的源代码;(2);不能修改呗装饰的函数的调用方式

  实现装饰器知识储备:(1)函数即变量(2)高阶函数(满足其一就是:一个函数作为另一个函数的入参;返回值包含函数名(3)嵌套函数
  高阶函数 + 嵌套函数 = 修饰器

1.简单的装饰器,统计接口运行时间

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import time
def timer(func):
     def deco( * args, * * kwargs):
         start_time = time.time()
         return func( * args, * * kwargs)
         end_time = time.time()
         print ( 'the run time is %s' % (end_time - start_time))
     return deco
 
# test1 = timer(test1)
@timer
def test1(times):
     time.sleep(times)
     print ( 'in the test1' )
     return times
 
print (test1( 1 ))

输出结果:

?
1
2
in the test1
1

2.模拟某些函数需要登陆验证,验证方式分为本地和ldap验证(完整版)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#模拟某些函数需要登陆验证,验证方式分为本地和ldap验证
 
userName,passWord = "Bert" , "abc123"  #假设是数据库用户名密码
def auth(auth_type):
     def outer_wrapper(func):
         def wrapper( * args, * * kwargs):
             if auth_type = = 'local' :
                 user_name = input ( 'Username:' ).strip()
                 pass_word = input ( 'Password:' ).strip()
                 if user_name = = userName and pass_word = = passWord:
                     print ( "用户名密码验证成功!" )
                     return func( * args, * * kwargs)
                 else :
                     print ( "用户名密码验证失败!" )
             elif auth_type = = 'ldap' :
                 print ( 'ldap方式验证登录。。。' )
                 return func( * args, * * kwargs)
         return wrapper
     return outer_wrapper
 
def index():
     print ( 'in the index' )
     return 'index'
@auth (auth_type = "local" ) #auth_type装饰器最外层函数的入参
def home():
     print ( 'in the home' )
     return 'home'
 
@auth (auth_type = "ldap" )
def bbs():
     print ( 'in the bbs' )
     return 'bbs'
 
index()
home()
bbs()

转载于:https://www.cnblogs.com/bert227/p/9299637.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值