装饰器
'''
装饰器的作用
加入购物车,付款,修改收获地址.....:
需要判断用户的登录状态
'''
'''def func(number):
a = 1000
def inner_func():
nonlocal a
for i in range(number):
a += 1
print(a)
return inner_func()
func(4)'''
# 地址引用
'''def test():
print('-----test-------')
t = test()'''
'''
装饰器使用的特点,函数是作为参数出现的,是传递给另外有一个函数的;要有闭包的特点出现,
'''
# 定义一个装饰器
'''def decorate(func):
a = 100
def wrapper():
print('---------->11111')
func()
print('--------->222222')
return wrapper()
#使用装饰器 @装饰器的名字
@decorate
def house():
print('我是毛坯房')
'''
'''def zhuangxiu(func):
def zhuangshi():
func()
print('已经装修完成')
return zhuangshi()
@zhuangxiu
def mpf():
print('我是一个毛坯房')
mpf()
'''
'''import time
# 登录验证
def decorate(func):
def wrapper(a):
print('正在检验----')
time.sleep(1)
print('检验完毕----')
# 调用我的原函数
func(a)
return wrapper
@decorate
def f1(n):
print('------f1------',n)
f1(5)
@decorate
def f2(name):
print('------f2-----',name)
f2('zzh')
'''
'''
# 多层装饰器 离的近的优先使用
# 装饰器带参数
def outer(a):#负责接收装饰器的参数
def decorate(func):#负责接收函数
def wrapper(*args, **kwargs):#负责接收函数的参数
func(*args, **kwargs)
print('----->铺地砖{}'.format(a))
return wrapper
return decorate
@outer(a=10)
def house(time):
print('我什么时候拿到房子{}'.format(time))
house(1997)
'''
'''
@outer(a=10)
def house(time):
print('我什么时候拿到房子{}'.format(time))
house(1997)'''
'''
@outer(a=1000)
def street():
print('新街道的名字是:黑泉路')
street()
'''
# 开发:登录验证
import time
is_login = False
def login():
global is_login
usr = input('输入你的用户名')
pwd = input('输入你的密码')
if usr == 'admin' and pwd == '123456':
print('登录成功')
is_login = True
return True
else:
print('登录失败')
return False
def login_required(func):
def wrapper(*args, **kwargs):
# 验证你的用户是否登录
print('进入付款界面----------')
if is_login:
func(*args, **kwargs)
else:
print('你没有登录不能付款')
login()
# 跳转到登录页面
return wrapper
@login_required
def pay(money):
print('正在付款中,付款的金额是{}'.format(money))
print('付款中')
time.sleep(1)
print('付款完成')
pay(100000)
pay(8)
smartcat.994