装饰器

# def f1():
# print(123)
# def f1():
# print(456)
# f1() 结果 456


# def f1():
# print('123')
# def f2(xxx):
# xxx() 结果123
# f2(f1)

    # 定义函数,为调用,函数内部不执行
    # 函数名 > 代指函数
-----------------------------------------------------------
def outer(func):
def inner(*args, **kwargs): inner代表包装后的函数
print('before')
r = func(*args, **kwargs) func()代表原函数
print('after')
return r
return inner

# @ + 函数名
# 功能:
# 1. 自动执行outer函数并且将其下面的函数名f1当作参数传递
# 2. 将outer函数的返回值,重复赋值给 f1
@outer
def f1(arg):
print(arg)
return "132"

@outer
def f2(a1, a2):
print("F2")

@outer
def f3():
print("F3")
--------------------------------------------------------------
简单装饰器:
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("欢迎%s登录" % LOGIN_USER['current_user'])

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

def main():
while True:
inp = input("1,后台管理;2,登录")
if inp == '1':
manager()
elif inp == '2':
username = input("请输入用户名")
pwd = input("请输入密码")
login(username, pwd)
------------------------------------------------
USER_INFO = {}                        #双层装饰器
# USER_INFO['is_login'] = True
# USER_INFO['user_type'] = 2

def check_login(func): #登录验证
def inner(*args, **kwargs):
if USER_INFO.get('is_login', None):
ret = func(*args, **kwargs)
return ret
else:
print('请登录')
return inner

def check_admin(func): #权限验证
def inner():
if USER_INFO.get('user_type', None) == 2:
ret = func(1121121)
return ret
else:
print('无权限查看')

return inner

@check_admin
def index(a):
"""
管理员的功能
:return:
"""
print('Index')

index()
posted @ 2016-06-03 14:18  6随6心6  阅读(116)  评论(0编辑  收藏  举报