装饰器

装饰器是闭包的一个应用,我们需要理解一些概念

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()

 

posted on 2020-02-29 09:30  江南兄  阅读(224)  评论(0编辑  收藏  举报