作业03-23

# 一:编写函数,(函数执行的时间用time.sleep(n)模拟)

import time

def index(x,y):

    time.sleep(3)

    print("index %s %s"%(x,y))

index(11,22)

#index(11,y=22)

#index(x=11,y=22)

# 二:编写装饰器,为函数加上统计时间的功能

import time

def timmer(func):

    def wrapper(*args,**kwargs):

    start = time.time()

    res = func(*args,**kwargs)

    stop = time.time()

    print(stop-start)

return wrapper

@timmer

def index(x,y):

    time.sleep(3)

    print("index %s %s"%(x,y))

index(1,2)

# 三:编写装饰器,为函数加上认证的功能

import time

def login(func):

    def wrapper(*args,**kwargs):

    username =input('your name:').strip()

    pwd =input("your password:").strip()

    if username =="Anna" and pwd =="123":

        res = func(*args,**kwargs)

        return res

    else:

        print("输入有误")

    return wrapper

@login

def index(x,y):

    time.sleep(3)

    print("index %s %s"%(x,y))

index(11,22)

# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式

import time

user_info = {"user":None}

def timmer(func):

    dic = {}

    def wrapper(*args,**kwargs):

        with open("login.txt","r",encoding="utf-8")as f:

            for linein f:

            user,pwd = line.strip().split(":")

            dic[user] = pwd

            username =input('your name:').strip()

            if usernamein dic:

                    password =input("your pwd:").strip()

                    re_password =input("your pwd:").strip()

                    if password == re_password:

                            res = func(*args,**kwargs)

                            return res

                    else:

                                print("输入有误")

        return wrapper

@timmer

def index(x,y,z):

    time.sleep(2)

    print("index %s %s %s"%(x,y,z))

index(11,22,33)

# 五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

#

#

# 六:选做题

# 思考题(选做),叠加多个装饰器,加载顺序与运行顺序,可以将上述实现的装饰器叠加起来自己验证一下

# @deco1 # index=deco1(deco2.wrapper的内存地址)

# @deco2 # deco2.wrapper的内存地址=deco2(deco3.wrapper的内存地址)

# @deco3 # deco3.wrapper的内存地址=deco3(index)

# def index():

#    pass

你可能感兴趣的:(作业03-23)