Python之装饰器

装饰器的作用:在不改变源代码和调用方式的情况下,实现功能的添加

(一)基础的装饰器(仅实现为函数添加功能)

     功能实现:

           为原函数添加计算运行时间的功能

            

'''
高阶函数+嵌套函数=>装饰器
装饰器的原则:
(1)不能改变被装饰函数的源代码
(2)不能改变被装饰函数的调用方式
'''
import time
def timer(func):
    def func_deco(*args,**kwargs):
        start_time=time.time()
        func(*args,**kwargs)
        run_time=time.time()-start_time
        print("函数的运行时间为 %s" %run_time)
    return func_deco  #返回函数运行的内存地址
@timer
def fun_te(name,age):
    time.sleep(1)
    print(name)
    print(age)
fun_te('lihanyu',18)

测试结果如下图所示:

 

(二)装饰器高潮版

   情景实现为:在网站的登录过程中,一部分为本地登录(local),一部分为ldap登录,在判断完登录方式以后,实现用户登录功能。

 

import time
user,pwd=('lihanyu','110')
def out(auth_type):
    def auth(func):
        def wapper(*args,**kwargs):#可以实现传任意个数的参数
            if auth_type=='local':
                username=input("username:")
                password=input("password:")
                if username==user and password==pwd:
                    print("验证成功")
                    res=func(*args,**kwargs)
                    return res  #返回所运行函数的返回值,此代码中即为home()的返回值
                else:
                    print("用户名或密码输入错误")
            elif auth_type=='ldap':
                print("我不懂啊。。。。。")
            else:
                print("没有此种登录方式")

        return wapper
    return auth
def index():
    print("welcome to index")
@out(auth_type='local')
def home():
    print('welcome to home page')
    return "from home"
@out(auth_type='ldap')
def bbs():
    print("welcome to bbs")
index()
print(home())
bbs()

测试结果如下图所示:

 

 欢迎各位大神测试,指正,谢谢!

 

转载于:https://www.cnblogs.com/come-on-baby/p/9480660.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值