欢迎访问宙启技术站
智能推送

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函数的内置装饰器和自定义装饰器的使用示例。装饰器是一个非常强大和灵活的功能,可以让我们对现有的函数进行各种改造和增强,使代码更加简洁和易于维护。希望这些示例能帮助你更好地理解和使用装饰器。