python中的装饰器(1)

单一职责原则

单一职责原则(Single Responsibility Principle, SRP)是面向对象编程中的一个核心原则,它指的是一个类或一个函数应该有且只有一个改变的理由。也就是说,一个函数或类应该只做一件事,并且做好这件事。如果一个函数尝试做太多的事情,它就会变得难以理解和维护。

def my_function():
    total = 0
    n = 100000
    start_time = time.time()
    for i in range(1, n):
        total += i 
    end_time = time.time()
    print(f"从1加到{n}的和:{total}, 执行耗时: {end_time - start_time:.4f} 秒")

my_function()中,包含两项任务,既计算1到n的和又打印函数执行时间,显然违反了函数的单一职责原则。
将函数my_function()按任务进行修改

# 计时函数
def time_spend(base_func):
    def enhance_fn():
        start_time = time.time()
        base_func()
        end_time = time.time()
        print(f"执行耗时: {end_time - start_time:.4f} 秒")
    return enhance_fn
#计算函数
def my_function():
    total = 0
    n = 100000
    for i in range(1, n):
        total += i
    print(f"从1加到{n}的和:{total}")

#执行
my_function = time_spend(my_function)
my_function()

这里的time_spend()就是装饰器函数,是 Python 里一个非常重要且实用的高级特性,在不修改计算函数的前提下,为其添加计时功能。
time_spend 接收base_func(被装饰的函数)作为参数。enhance_fn增强函数,也可以称其为包装函数,实现额外功能(计时),并调用原函数base_func
这里的my_function = time_spend(my_function)还可以用@time_spend代替。

# 计时函数
def time_spend(base_func):
    def enhance_fn():
        start_time = time.time()
        base_func()
        end_time = time.time()
        print(f"执行耗时: {end_time - start_time:.4f} 秒")
    return enhance_fn
#计算函数
@time_spend
def my_function():
    total = 0
    n = 100000
    for i in range(1, n):
        total += i
    print(f"从1加到{n}的和:{total}")

#执行
my_function()

这就是一个简单的装饰器示例。

posted @ 2026-02-23 14:44  华小电  阅读(2)  评论(0)    收藏  举报