装饰器
Python装饰器是一种用于拓展函数功能的高级语法特性,它的目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。
一个Python装饰器本质上是一个闭包,它接收一个函数作为参数,返回一个新的函数。这个新的函数通常会包装原函数,并在调用原函数之前或之后执行一些额外的逻辑。
在Python中,装饰器使用@语法糖进行定义和声明。下面是一个简单的装饰器示例:
def my_decorator(func):
def wrapper():
print("Before the function is called.")
func()
print("After the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
带参数的装饰器
import time
def showtime(func):
def wrapper(a,b):
start_time = time.time()
func(a,b)
end_time = time.time()
print('spend is {}'.format(end_time - start_time))
return wrapper
@showtime
def sub(a,b):
result=a-b
print("计算结果是{0}".format(result))
sub(5,1)
一个函数还可以同时定义多个装饰器,比如:
@a
@b
@c
def f ():
pass
它的执行顺序是从里到外,最先调用最里层的装饰器,最后调用最外层的装饰器,它等效于
f = a(b(c(f)))
闭包
闭包(Closure)是指一个函数嵌套在另一个函数中,并且内部的函数引用了外部函数的变量。这种引用关系使得内部的函数即使在外部函数执行完毕后,仍然能够访问和修改外部函数的变量。