装饰器

'''
装饰器的作用
加入购物车,付款,修改收获地址.....:
需要判断用户的登录状态

'''

'''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)
原文地址:https://www.cnblogs.com/SmartCat994/p/12306900.html