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()

测试结果如下图所示:

 

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

 

posted @ 2018-08-15 12:07  %木糖醇---LHY%  阅读(141)  评论(0编辑  收藏  举报