郑统京 发表于 2023-7-20 00:42:10

随笔十一 : 有参装饰器源码及应用

示例一:
其中的装饰器check_permission接受一个参数permission_level,用于检查用户权限:
def check_permission(permission_level):
    def decorator(func):
      def wrapper(*args, **kwargs):
            # 在这里执行权限检查逻辑
            if check_user_permission(permission_level):
                return func(*args, **kwargs)
            else:
                raise PermissionError("Insufficient permission level")
      return wrapper
    return decorator


# 示例函数
@check_permission(permission_level=2)
def restricted_function():
    print("This function requires permission level 2")


# 调用示例函数
restricted_function()


示例二:
def repeat(num_times):
    def decorator(func):
      def wrapper(*args, **kwargs):
            for _ in range(num_times):
                result = func(*args, **kwargs)
            return result
      return wrapper
    return decorator

# 示例函数
@repeat(num_times=3)
def greet(name):
    print(f"Hello, {name}!")

# 调用示例函数
greet("Alice")
'''
在上述示例中,repeat 是一个有参装饰器,它接受一个参数 num_times,用于指定函数被重复执行的次数。装饰器函数 decorator 接受被装饰的函数 func 作为参数,
并返回一个包装函数 wrapper。在包装函数中,我们使用 for 循环将被装饰的函数执行 num_times 次。在示例中,我们使用 @repeat(num_times=3) 来装饰
greet 函数,这意味着 greet 函数将会被重复执行 3 次。最终调用 greet("Alice") 时,"Hello, Alice!" 将被打印出来三次。请注意,这只是一个简单的
有参装饰器示例,实际应用中可以根据需求进行更复杂的逻辑处理。装饰器提供了一种灵活的方式来修改或扩展函数的行为,可以用于各种场景,如日志记录、性能分析、缓存等。
'''


这是一个简单的有参装饰器示例,装饰器check_permission接受一个参数permission_level,然后返回一个装饰器函数decorator,它接受被装饰的函数func作为参数,并返回一个包装函数wrapper。在包装函数中,我们可以根据传入的permission_level进行权限检查。

以下是三个应用场景的示例:
1:权限控制:可以使用带有参数的装饰器来实现权限控制的功能。在示例中,check_permission装饰器根据传入的权限级别进行权限检查,确保只有具备足够权限的用户可以访问被修饰的函数
2:日志记录:带有参数的装饰器还可以用于添加日志记录功能。可以传入日志文件路径、日志级别等参数,装饰器可以在函数执行前后记录相关的日志信息
3:性能分析:装饰器可以用于对函数的性能进行分析。可以传入一个性能分析工具的参数,装饰器可以在函数执行前后计算函数的执行时间或其他性能指标,并进行记录或打印。

页: [1]
查看完整版本: 随笔十一 : 有参装饰器源码及应用