python学习笔记 day12 作业讲解

编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件)

要求成功登陆一次,后续的函数都无需输入用户名和密码

flag=1
def wrapper(f):
    def inner(*args):
        global flag
        while flag:
            username=input("username>>>")
            password=input("password>>>")
            with open('info',mode='r',encoding='utf-8') as file:
                line=file.readline().split(' ')
                if username==line[0] and password==line[1]:
                    print("登录成功!")
                    flag=0  #登陆成功之后后面的函数都无需再输入用户名密码
        ret=f(*args)
        return ret
    return inner

@wrapper
def func1(a,b):
    return a+b
@wrapper
def func2(a,b,c):
    return a*b*c
print('func1函数执行结果:',func1(1,2))
print('func2函数执行结果:',func2(1,2,3))

运行结果:

版本二(EVa-J):

flag=0
def wrapper(f):
    def inner(*args):
        global flag
        if flag:
            ret = f(*args)
            return ret
        else:
            username=input(">>>")
            password=input(">>>")
            with open('info',encoding='utf-8') as file:
                line=file.readline().split(' ')
            if username==line[0] and password==line[1]:
                print("登录成功")
                flag=1
                ret=f(*args)
                return ret
            else:
                print("登录失败")
    return inner
@wrapper
def func1(a,b):
    return a+b
@wrapper
def func2(a,b,c):
    return a*b*c
print(func1(1,2))
print(func2(1,2,3))

编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件:

def wrapper(f):
    def inner(*args):
        ret=f(*args)
        with open('info1',mode='a+',encoding='utf-8') as file:
            name=f.__name__
            file.write(name)
        return ret
    return inner

@wrapper
def func1(a,b):
    return a+b
@wrapper
def func2(c,d,e):
    return c*d*e
@wrapper
def func3(a,b,c,d,e):
    return a,b,c,d,e
print(func1(1,2))
print(func2(1,2,3))
print(func3(1,2,3,4,5))

运行结果:

猜你喜欢

转载自www.cnblogs.com/xuanxuanlove/p/9568322.html