Python函数的内置装饰器和自定义装饰器的使用示例
发布时间:2023-07-04 12:35:53
函数装饰器是Python中一种非常有用的功能。它可以改变现有函数的行为,而无需修改函数的定义。Python提供了许多内置的装饰器,同时也允许用户自定义装饰器。
内置装饰器的使用示例:
1. @staticmethod装饰器
这个装饰器用于将一个函数转换为静态方法。静态方法不需要引用类的实例,可以直接通过类名调用。
示例:
class MathUtils:
@staticmethod
def add(a, b):
return a + b
使用示例:
print(MathUtils.add(2, 3)) 输出:5
2. @classmethod装饰器
这个装饰器用于将一个函数转换为类方法。类方法的 个参数是类本身而不是实例,可以通过类名调用。
示例:
class Circle:
PI = 3.14159
def __init__(self, radius):
self.radius = radius
@classmethod
def calculate_area(cls, radius):
return cls.PI * radius * radius
使用示例:
print(Circle.calculate_area(5)) 输出:78.53975
3. @property装饰器
这个装饰器用于将一个方法转换为只读属性。通过这个装饰器装饰的方法可以像属性一样访问,而无需添加()运算符。
示例:
class Rectangle:
def __init__(self, width, height):
self._width = width
self._height = height
@property
def area(self):
return self._width * self._height
使用示例:
rectangle = Rectangle(5, 3) print(rectangle.area) 输出:15
自定义装饰器的使用示例:
1. 日志装饰器
这个装饰器用于在函数执行前打印一条日志。
示例:
def log_decorator(func):
def wrapper(*args, **kwargs):
print('Func {} is running...'.format(func.__name__))
return func(*args, **kwargs)
return wrapper
使用示例:
@log_decorator
def add(a, b):
return a + b
print(add(2, 3))
输出:
Func add is running...
5
2. 计时装饰器
这个装饰器用于计算函数的执行时间。
示例:
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print('Func {} took {} seconds to run.'.format(func.__name__, end_time - start_time))
return result
return wrapper
使用示例:
@timer_decorator
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(10))
输出:
Func fibonacci took 0.45501160621643066 seconds to run.
55
以上是Python函数的内置装饰器和自定义装饰器的使用示例。装饰器是一个非常强大和灵活的功能,可以让我们对现有的函数进行各种改造和增强,使代码更加简洁和易于维护。希望这些示例能帮助你更好地理解和使用装饰器。
