装饰器
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('我是毛坯房...')
带参数的装饰器
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)
|