python基础——装饰器

装饰器的作用,在不改变函数的情况下,在函数前后添加功能。

文件1:zsq1.py

 

#!/usr/bin/env python3

def outer(func):
    def inner(*args,**kwargs):
        print("before")
        r=func(*args,**kwargs)
        print("after")
        return r
    return inner  #返回

@outer
def f1(arg):
    print(arg)
    return "原始f1的返回值"

@outer
def f2(arg1,arg2):
    print(arg1,arg2)

"""
@+函数名
功能:
    1.自动执行outer函数,并且将下面的函数名f1当作参数传递,相当于把原始f1赋值给func
    2.将outer函数的返回值,内层inner函数,重新赋值给f1,相当于把f1变成inner去执行
"""

ret=f1("ss")
print("返回值",ret)

ret=f2("aa","bb")
print("返回值",ret)

文件2:zsq2.py

import zsq1
ret=zsq1.f1("ss")
print("返回值",ret)

ret=zsq1.f2("11","22")
print("返回值",ret)

 

 

装饰器做权限认证

LOGIN_USER = {"is_login":False}

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

@outer
def manager():
    print("后台管理")
    print("欢迎%s登陆" % LOGIN_USER["current_user"])

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

def main():
    inp=input("1.后台管理;2.登陆")
    if inp=="1":
        manager()
    elif inp=="2":
        username=input("用户名")
        passwd=input("密码")
        login(username,passwd)

main()

 

多层装饰器

USER_INFO={}

def check_login(func):
    def inner(*args,**kwargs):
        if USER_INFO.get("is_login",None):
            ret=func(*args,**kwargs)
            return ret
        else:
            print("请登录")
            login()
    return inner
def check_admin(func):
    def inner(*args,**kwargs):
        if USER_INFO.get("user_type",None) ==1:
            ret=func(*args,**kwargs)
            return ret
        else:
            print("无权限")
    return inner


@check_login
@check_admin
def index():    #管理员功能
    print("index")

@check_login
def home(): #普通用户
    print("home")

def login():
    username=input("用户名")
    pwd=input("密码")
    if username=="admin" and pwd=="123":
        USER_INFO["is_login"] = True
        USER_INFO["user_type"] =1
    if username=="ss" and pwd=="123":
        USER_INFO["is_login"] =True
        USER_INFO["user_type"] =2
    else:
        print(错误)


def main():
    inp=input("1.登陆;2.查看信息;3.超级管理员")
    if inp=="1":
        login()
    elif inp=="2":
        home()
    elif inp=="3":
        index()

main()

 

posted @ 2016-09-01 11:46  沄持的学习记录  阅读(218)  评论(0编辑  收藏  举报