python二十三:装饰器 ?

  

import time
# 装饰器的架子
def timer(func):
    def wrapper():
        start_time = time.time()
        func()
        stop_time = time.time()
        print("函数运行时间%s"%(stop_time-start_time))
    return wrapper

def test():
    time.sleep(2)
    print("函数运行完毕..")

res = timer(test) # 返回的是wrapper函数的地址
res() # 执行的是wrapper函数

语法糖语法

import time
# 装饰器的架子
def timer(func):
    def wrapper():
        start_time = time.time()
        res = func()
        stop_time = time.time()
        print("函数运行时间%s"%(stop_time-start_time))
        return res
    return wrapper

@timer  # @timer相当于 test = timer(test)
def test():
    time.sleep(2)
    print("函数运行完毕..")
    return "test()"

res = test()
print(res)
def decorator(func):
    def wrapper(*args, **kwargs):
        uname = input("请输入用户名:")
        pwd = input("请输入密码:")
        if (uname=="张飞" and pwd == "123"):
          res = func(*args, **kwargs)
          return res
        else:
            print("用户名或密码错误")
    return wrapper

@decorator
def index():
    print("welcome to jd");

@decorator
def home(name):
    print("welcome to home, %s"%name)

@decorator
def shopping_car(name):
    print("%s的购物车都有啤酒,平板电脑"%name)


#index()
#home("张飞")
shopping_car("张飞")
user_list = [{"name":"刘备", "passwd":"123"},
             {"name":"关羽", "passwd":"123"},
             {"name":"张飞", "passwd":"123"},
             {"name":"赵云", "passwd":"123"}]

login_user = {"username":None, "login":False}
def loadMeth(loadType="oracle"):
    print("first",loadType)
    def decorator(func):
        print("second", loadType)
        def wrapper(*args, **kwargs):
            print("loadType:",loadType)
            # 如果用户已经登录过,则不用再次输入用户名 密码
            if login_user["username"] and login_user["login"]:
                res = func(*args, **kwargs)
                return res
            uname = input("请输入用户名:")
            pwd = input("请输入密码:")
            for index, user_dic in enumerate(user_list):
                if (user_dic["name"]==uname and user_dic["passwd"] == pwd):
                    login_user["username"] = uname
                    login_user["login"] = True
                    res = func(*args, **kwargs)
                    return res

            print("用户名或密码错误")
        return wrapper
    return decorator


@loadMeth()  #带参数的装饰器不是太明白.  为什么@loadMeth()和@loadMeth是不同的结构
def index():
    print("welcome to jd");


@loadMeth()
def home(name):
    print("welcome to home, %s"%name)

@loadMeth()
def shopping_car(name):
    print("%s的购物车都有啤酒,平板电脑"%name)


print(index)
print(home)

index()
print(home)
home("赵云")
shopping_car("赵云")
print(login_user)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值