# 装饰器带参数 带参数的装饰器是三层的 最外层的函数负责接收装饰器参数 里面的内容还是原装饰器的内容
def outer(a): # 第一层: 负责接收装饰器的参数
print('------------1 start')
def decorate(func): # 第二层 : 负责接收函数的
print('------------2 start')
def wrapper(*args, **kwargs): # 第三层 负责接收函数的参数
func(*args)
print("---->铺地砖{}块".format(a))
print('------------2 end')
return wrapper # 返出来的是:第三层
print('------------1 end')
return decorate # 返出来的是:第二层
@outer(10)
def house(time):
print('我{}日期拿到房子的钥匙,是毛坯房....'.format(time))
house('2019-6-12')
# 开发:登录验证
import time
islogin = False # 默认是没有登录的
# 定义一个登录函数
def login():
useranme = input('输入用户名:')
password = input('输入密码:')
if useranme == 'admin' and password == '123456':
return True
else:
return False
# 定义一个装饰器,进行付款验证
def login_required(func): # func = pay
def wrapper(*args, **kwargs):
global islogin
print('-----------付款------------')
# 验证用户是否登录
if islogin:
func(*args, **kwargs) # pay(8000)
else:
# 跳转到登录页面
print('用户没有登录,不能付款!')
islogin = login()
print('result:', islogin)
return wrapper
@login_required
def pay(money):
print('正在付款,付款金额是:{}元'.format(money))
print('付款中....')
time.sleep(2)
print('付款完成!')
# 调用 pay = wrapper(10000)
pay(10000)
pay(8000)