python-装饰器

如果在函数f1上方使用了“@+装饰器函数名”(以上图为例),当在程序中调用f1()时,执行过程如下:

1》执行outer函数

2》将f1赋值给func

    此时的func()相当于:

       print("F1")

3》将inner赋值给f1

4》执行inner函数,即为

     print("before")

     print("F1")

     print("after")

 带参数的函数加装饰器的书写方式:

有多个参数的函数加装饰器的写法(所有函数都可以应用此类装饰器):

装饰器应用实例--用户管理程序

 

LOGIN_USER = {"is_login":False}


def outer(func):
    def inner(*args):
        if LOGIN_USER['is_login']:
            r = func()
            return r
        else:
            print("请登录")
    return inner

@outer
def order():
    print("欢迎%s登录"%LOGIN_USER['current_user'])


@outer
def changepwd():
    print("欢迎%s登录"%LOGIN_USER['current_user'])

@outer
def manager():
    print("欢迎%s登录"%LOGIN_USER['current_user'])


"""
#不用装饰器的写法
def order():
    if LOGIN_USER['is_login']:
        print("欢迎%s登录"%(LOGIN_USER['current_user']))
    else:
        print("请登录")

def changepwd():
    if LOGIN_USER['is_login']:
        print("欢迎%s登录"%(LOGIN_USER['current_user']))
    else:
        print("请登录")


def manager():
    if LOGIN_USER['is_login']:
        print("欢迎%s登录"%(LOGIN_USER['current_user']))
    else:
        print("请登录")
"""


def login(username, pwd):
     if username == "alex" and pwd == "123":
        LOGIN_USER['is_login'] = True
        LOGIN_USER['current_user'] = username
        manager()


def main():
    while True:
        inp = input("1,后台管理;2,登录")
        if inp == '1':
            manager()
        elif inp == '2':
            username = input("请输入用户名")
            pwd = input("请输入密码")
            login(username, pwd)


main()
用户管理程序

 

 

posted @ 2017-03-01 21:15  爆烈鼓手  阅读(207)  评论(0)    收藏  举报