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()
这就是一个简单的装饰器示例。

浙公网安备 33010602011771号