装饰器
装饰器是闭包的一个应用,我们需要理解一些概念
1、闭包的概念:在一个外函数中定义了一内函数,内函数里运用了外函数的非全局变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
2、开放封闭原则(面向对象原则核心):软件实体应该是可拓展的,而不可修改的,也就是说对拓展是开放的,对修改是封闭的
实现一个装饰器:
一、#登录场景(无参装饰)
username = 'name'
pwd = '123456'
def login(func):
def fun():
user = input('请输入用户名')
pd = input('请输入密码')
if username == user and pwd == pd:
func()
else:
print('登录失败')
return fun
@login
def home():
print('HOME')
home()
二、带参装饰
import time
def wait_time(func):
def count(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
print('函数运行时间{:.5f}'.format(end_time - start_time))
return count
@wait_time
def add(a, b):
time.sleep(3)
print(a + b)
add(54, 56)
@wait_time
def print_a():
time.sleep(2)
print('aaaaaaaa')
print_a()