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)是指一个函数嵌套在另一个函数中,并且内部的函数引用了外部函数的变量。这种引用关系使得内部的函数即使在外部函数执行完毕后,仍然能够访问和修改外部函数的变量。