装饰器:高阶函数+嵌套函数+闭包
装饰器可以接收不定长参数、有返回值
def validate_login(func):
def login(*args, **kwargs):
user_name = input('请输入用户名:').strip()
pwd = input('请输入用户密码:').strip()
if user_name == 'alex' and pwd == '123456':
res = func(*args, **kwargs) # 加上返回值
return res
else:
print('用户名或密码错误')
return login
@validate_login
def index():
print('欢迎来到京东!')
@validate_login
def home():
print('%s 欢迎回家!' % '产品经理')
@validate_login
def shopping_cart(naem):
print('%s 购物车里有:[%s, %s, %s]' % ('产品经理', '手机', '电脑', 'ipaid'))
index()
home()
shopping_cart('产品经理')
记录登录状态
user_dic = {'user_name': None, 'login': False}
def validate_login(func):
def login(*args, **kwargs):
if user_dic['user_name'] == 'alex' and user_dic['login']:
res = func(*args, **kwargs) # 加上返回值
return res
else:
user_name = input('请输入用户名:').strip()
pwd = input('请输入用户密码:').strip()
if user_name == 'alex' and pwd == '123456':
user_dic['user_name'] = user_name
user_dic['login'] = True
res = func(*args, **kwargs) # 加上返回值
return res
else:
print('用户名或密码错误')
return login
@validate_login
def index():
print('欢迎来到京东!')
@validate_login
def home():
print('%s 欢迎回家!' % '产品经理')
@validate_login
def shopping_cart(naem):
print('%s 购物车里有:[%s, %s, %s]' % ('产品经理', '手机', '电脑', 'ipaid'))
index()
home()
shopping_cart('产品经理')
user_list = [
{'name': 'alex', 'passwd': 'alex123'},
{'name': 'xueyi', 'passwd': 'xueyi123'},
{'name': 'momo', 'passwd': 'momo123'}
]
current_user = {'name': None, 'login': False}
def auth_login(func):
def login(*args, **kwargs):
if current_user['name'] and current_user['passwd']:
res = func(*args, **kwargs)
return res
user_name = input('请输入用户名:')
passwd = input('请输入用户密码:')
for i, v in enumerate(user_list):
if user_name == v['name'] and passwd == v['passwd']:
current_user['name'] = user_name
current_user['passwd'] = passwd
res = func()
return res
else:
print('用户名或密码错误!')
return login
@auth_login
def index():
print('欢迎来到京东')
@auth_login
def home(name):
print('%s 欢迎回家' % name)
index()
home('产品经理')