装饰器
1.函数A是作为参数出现的,函数B就接收了函数A作为参数
2.要有闭包的特点出现
格式如下:
#定义一个装饰器
def decorator(func):
a=100
def wrapper():
print('--------->111111')
func()
print('--------->222222')
print(a)
return wrapper
#使用装饰器
@decorator
def house():
print('我是毛坯房...')
house()
结果如下,可以不改变函数名,调用装饰器。
--------->111111
我是毛坯房...
--------->222222
100
万能装饰器
def decorator(func):
a=100
print('wwrapper')
def wrapper():
print('--------->111111')
func()
print('--------->222222')
print(a)
print('1111')
return wrapper
#使用装饰器
@decorator
def house():
print('我是毛坯房...')
#1.house称作被装饰函数,2.将装饰函数作为参数传给装饰器decorater 3.只要装饰,就必须执行装饰器函数,就会打印
带参数的装饰器
#装饰器带参数,装饰器需要三层
def outer(a):
def decorate(func):
def wrapper(*args,**kwargs):
func(*args)
print("----->铺地砖..{}".format(a))
return wrapper
return decorate
@outer(10)
def house(time):
print('我{}日期拿到房子的要是,是毛坯房...'.format(time))
house('2019-6-12')
应用
#开发 登录验证
import time
islogin = False
#定义一个登录函数
def login():
username = input('输入用户名:')
password = input('输入密码:')
if username=='admin'and password=='123456':
return True
else:
return False
#定义一个装饰器进行付款验证
def login_required(func):
def wrapper(*args,**kwargs):
global islogin
print('----------付款----------')
#验证用户是否登录
if islogin:
func(*args,**kwargs)
else:
#跳转登录页面
print('用户没有登录,不能付款')
islogin = login()
print('result',islogin)
return wrapper
@login_required
def pay(money):
print('正在付款,付款金额是:{}'.format(money))
print('付款中...')
time.sleep(2)
print('付款完成')
pay(10000)
pay(1000)