当前位置:首页>python>Python的装饰器

Python的装饰器

  • 2026-10-11 07:43:48
Python的装饰器
装饰器(decorator):在不改变原函数代码的情况下,给它添加额外的功能。
简单的例子:
# 定义装饰器de my_decorator(fun):  def wrapper():    print("执行前")    fun()    print("执行后")  return wrapper# wrapper:可以自定义其他的名字# 使用装饰器@my_decoratordef say_hello():  print("hello")# 执行say_hello()
装饰器的执行等价流程:
@my_decorator等价于say_hello = my_decorator(say_hello)
标准的装饰器结构:
def decorator(func): 接收函数  def wrapper(*args, **kwargs) 包装函数    return func(*args, **kwargs)  return wrapper  返回函数
进阶带参数的装饰器
# 定义装饰器def repeat(n):  def decorator(func):    def wrapper(*args, **kwargs):      for _ in range(n):        func(*args, **kwargs)     return wrapper  return decorator#使用装饰器@repeat(3)def say():  print("hi)# 执行say()
python是先执行装饰器表达式,再把函数自动塞进去
@后面的表达式会先执行,最终返回一个装饰器函数,然后python才把函数放进去。
因此装饰器可以n-1层的参数传递,最后第n层是函数装饰器。
装饰器函数的执行时间线:
# 程序加载时
执行layer(10)(20)
定义say()
执行decorator(say)
装饰完成
# 运行时
say()
    wrapper()
    原say()
总结:装饰器在函数定义的时候就执行一次,say()只是调用包装后的函数
装饰器做的就是,在函数出生的时候,就给他换一个新的身份。

最新文章

随机文章