Python3--装饰器(随堂笔记)

发布时间:2019-09-18 07:21:09编辑:auto阅读(1593)

    装饰器前戏

    import time
    def bar():
        time.sleep(3) # 睡3秒
        print("in the bar")
    def test1(func):
        print("in the test1")
        return func
    bar=test1(bar)  # 把bar函数的内存地址传给test1函数(func参数接受bar内存地址),test1函数再returne返回内存地址,再赋值给bar变量
    bar()# bar变量(内存地址)加()就成了函数运行

    装饰器小高潮

    未加装饰器前代码

    def test1():
        time.sleep(3) #睡3秒
        print("in the test1")
    def test2():
        time.sleep(3)
        print("in the test2")
    test1()
    test2()

    加上装饰器后

    import time
    def timer(func):
        def deco():
            start_time = time.time() # 获取当前系统时间 (内容开始时间)
            func()
            stop_time = time.time() # 获取当前系统时间 (内容结束时间)
            print("运行时间为:%s"%(stop_time-start_time))
        return deco
    
    @timer        # @timer = test1=timer(test1) 
    def test1():
        time.sleep(3) #睡3秒
        print("in the test1")
    
    @timer
    def test2():
        time.sleep(3)
        print("in the test2")
    test1()
    test2()

    装饰器高潮

    user,password = "lt","111"
    def login(login_type):
        print("login:",login_type)
        def user_login(func):
            def loging(*ages, **kwargs):
                print("*ages, **kwargs:", *ages, **kwargs)
                if login_type =="local":
                    Username = input("用户名:")
                    Password = input("密码:")
                    if user == Username and password == Password:
                        print("登陆成功!")
                        return func(*ages, **kwargs)
                    else:
                        print("登陆失败!")
                elif login_type == "ldap":
                    print("我是ldap")
            return loging
        return user_login
    
    def index():
        print("这里是首页index")
    @login(login_type="local")
    def home(name):
        print("这里是个人页home",name)
        return "我是返回的数据"
    @login(login_type="ldap")
    def bbs():
        print("这里是论坛页bbs")
    index()
    print(home(user))
    bbs()

关键字