Python中的装饰器函数介绍及应用
发布时间:2023-06-03 06:09:02
装饰器函数是Python中一种高级的操作,它可以让我们在不改变原函数代码的情况下,对其进行增强。在今天的文章中,我们将介绍装饰器函数的基本概念,以及在Python中如何使用它。
一、什么是装饰器函数
装饰器函数本身也是一个函数,它可以接收其他函数作为参数,并且在不改变参数函数代码的情况下,为其添加一些额外的功能,例如:记录函数运行时间、缓存函数计算结果等等。装饰器函数的本质就是返回一个函数对象,这个返回的函数实现了对原函数的增强操作。
二、装饰器函数的应用
1、函数运行时间计算
我们经常需要计算函数运行的时间,装饰器函数可以让我们在不修改函数代码的情况下,为其添加运行时间计算的功能。
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("运行时间:%.6f秒" % (end_time - start_time))
return result
return wrapper
@timer
def test_func():
time.sleep(3)
test_func()
2、函数计算结果缓存
当我们编写函数时,如果这个函数需要执行大量的计算,每次调用这个函数都需要执行一次计算,这将很浪费时间。使用装饰器函数,可以将函数的计算结果缓存起来,当下次调用函数时,如果输入参数没有变化,则直接返回缓存结果。
def memoize(func):
caches = {}
def wrapper(*args):
if args in caches:
return caches[args]
else:
result = func(*args)
caches[args] = result
return result
return wrapper
@memoize
def fibonacci(n):
if n<=1:
return n
else:
return fibonacci(n-1)+fibonacci(n-2)
print(fibonacci(40)) # 102334155
三、常见的装饰器函数
在Python中,已经有很多常用的装饰器函数,下面是一些常见的装饰器函数:
1、@staticmethod:将一个方法转换为静态方法。静态方法不需要实例化对象就可以使用。
class Test:
@staticmethod
def add(a, b):
return a + b
print(Test.add(1, 2)) # 3
2、@classmethod:将一个方法转换为类方法。类方法 个参数总是类本身,不需要实例化对象。
class Test:
count = 0
@classmethod
def add_count(cls):
cls.count += 1
return cls.count
print(Test.add_count()) # 1
print(Test.add_count()) # 2
3、@property:将一个方法转换成属性。当我们需要用方法来获取一个属性时,可以使用@property装饰器。
class Test:
def __init__(self, age):
self._age = age
@property
def age(self):
return self._age
t = Test(18)
print(t.age) # 18
四、总结
本文介绍了Python中装饰器函数的基本概念,以及它在Python中的应用,并且介绍了一些常见的装饰器函数。装饰器函数是Python中一种非常高级的功能,掌握装饰器函数的使用可以让我们更好的编写Python程序。
