Python装饰器

装饰器是Python中一种特殊的语法结构,它允许程序员在不修改被装饰对象源代码的情况下,通过在函数或类定义前加上“@装饰器函数”的形式来动态地扩展或修改原始行为,使得代码复用和可维护性更好。

装饰器本质是一个闭包函数,所以在讲解装饰器之前,需要先理解Python闭包函数的概念,闭包函数有以下几个特点:

  • 闭包函数是函数的嵌套,函数内还有函数,即外层函数嵌套一个内层函数。
  • 在外层函数定义局部变量,在内层函数通过nonlocal引用,并实现指定功能。

装饰器-记录函数运行时间:

import time

def time_func(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(func.__name__ + "\n" + f"{end - start:0.4f}")
        return result
    return wrapper

@time_func
def fib(n):
    if n <= 1:
        return n
    else:
        return fib(n-1) + fib(n-2)

print(fib(30))

在这个例子中,我们定义了一个计时器装饰器函数time_func,它接收一个函数作为参数,并返回一个新的函数wrapper。wrapper函数包含了原始函数fib的所有参数(使用args和*kwargs),并在执行原始函数之前记录起始时间,在执行结束后打印运行时间。

使用装饰器语法糖@time_func修饰fib函数,可以自动将fib传递给time_func函数,将fib函数修改为wrapper函数,并返回修改后的wrapper函数。最后我们调用fib(30)来测试程序的运行时间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 部分细节自己改了点,也加了点自己例子,基本上属于转载。转载出处:https://my.oschina.net/le...
    洛克黄瓜阅读 2,024评论 0 3
  • 在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过...
    愚灬墨阅读 470评论 1 1
  • 一、什么是装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外...
    阿飞666666阅读 489评论 0 2
  • www.yunxcloud.cn 首先要明白装饰器是用来给函数增加额外功能的。 常用的工具函数 import ti...
    彩色系阅读 1,043评论 0 1
  • 装饰器作为Python当中非常经典和实用的feature,在项目当中应用是非常广泛的,比如说记录运行时间,缓存,鉴...
    Litt1eQ阅读 150评论 0 1