python 装饰器!!!
https://www.jb51.net/article/168276.htm
https://www.cnblogs.com/lianyingteng/p/7743876.html
装饰器(Decorators)是Python的一个重要部分,它是你进入python大门的一道坎,不管你跨不跨得进去,它都在那里。
装饰器在pthon使用中如此方便都要归因于python中一切皆对象。python中的函数能像普通的对象一样作为参数传递给其他参数,可以被赋值给其他变量,可以作为返回值,可以被定义在另外一个函数内。
python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。
装饰器函数的外部函数传入我要装饰的函数名字,返回经过修饰后函数的名字;内层函数(闭包)负责修饰被修饰函数。从上面这段描述中我们需要记住装饰器的几点属性,以便后面能更好的理解:
实质: 是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动
python装饰器有很多经典的应用场景,比如:插入日志、性能测试、事务处理、权限校验等。装饰器是解决这类问题的绝佳设计。并且从引入中的列子中我们也可以归纳出:装饰器最大的作用就是对于我们已经写好的程序,我们可以抽离出一些雷同的代码组建多个特定功能的装饰器,这样我们就可以针对不同的需求去使用特定的装饰器,这时因为源码去除了大量泛化的内容而使得源码具有更加清晰的逻辑。
1,闭包函数
在Python中,可以在函数内部创建另一个函数,叫作内嵌函数。只能在外部函数的作用域内被正常调用,在外部函数的作用域之外调用就会出错。
若果内部函数里面引用了外部函数里定义的对象(甚至是外层之外,但不是全局变量),那么此时内部函数就被成为闭包函数。闭包函数所应用的外部定义的变量叫作自由变量。闭包从语法上非常简单,但哟组合强大的作用。闭包可以将自己的代码和作用域以及外部的函数的作用域结合在一起。
总结:什么样的函数被称为闭包函数呢? 主要满足两点:函数内部定义的函数;引用了外部变量但非全局变量。
函数的函数装饰器
import time
def decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func()
end_time = time.time()
print(end_time - start_time)
return wrapper
@decorator
def func():
time.sleep(0.8)
func() # 函数调用
输出:0.800644397735595
类方法的函数装饰器
import time
def decorator(func):
def wrapper(me_instance):
start_time = time.time()
func(me_instance)
end_time = time.time()
print(end_time - start_time)
return wrapper
class Method(object):
@decorator
def func(self):
time.sleep(0.8)
p1 = Method()
p1.func() # 函数调用
网友评论