前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python: 高阶函数应用装饰器模式(Decorator)

Python: 高阶函数应用装饰器模式(Decorator)

作者头像
运维开发王义杰
发布2024-05-17 18:19:47
680
发布2024-05-17 18:19:47
举报

装饰器简介

装饰器是一种设计模式,用于在不改变原函数的情况下,动态地向函数添加功能。装饰器本质上是一个高阶函数,它接受一个函数作为参数,并返回一个新的函数。

装饰器的基本语法

装饰器的使用非常简单,只需在函数定义之前加上 @decorator_name 即可。

示例代码
代码语言:javascript
复制

python
def decorator(func):
    def wrapper(*args, **kwargs):
        print("Function is being called")
        result = func(*args, **kwargs)
        print("Function has been called")
        return result
    return wrapper

@decorator
def say_hello(name):
    print(f"Hello, {name}")

say_hello("Alice")

在这个示例中:

  • decorator 是装饰器函数。
  • @decorator 应用于 say_hello 函数,使得 say_hello 被调用时,会先执行 decorator 中的 wrapper 函数逻辑。

装饰器的应用场景

日志记录

记录函数调用的相关信息,便于调试和监控。

代码语言:javascript
复制

python
def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__} with arguments {args} and {kwargs}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} returned {result}")
        return result
    return wrapper

@log_decorator
def add(a, b):
    return a + b

add(3, 5)

权限验证

检查用户权限,控制函数访问。

代码语言:javascript
复制

python
def authorize(func):
    def wrapper(user, *args, **kwargs):
        if user == "admin":
            return func(*args, **kwargs)
        else:
            print("Permission denied")
    return wrapper

@authorize
def view_dashboard():
    print("Dashboard is being viewed")

view_dashboard("admin")
view_dashboard("guest")

缓存机制

对函数结果进行缓存,提高性能。

代码语言:javascript
复制

python
def cache(func):
    results = {}
    def wrapper(*args):
        if args in results:
            return results[args]
        result = func(*args)
        results[args] = result
        return result
    return wrapper

@cache
def fibonacci(n):
    if n in (0, 1):
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(10))

装饰器的嵌套使用

多个装饰器可以同时应用于一个函数,顺序从内到外执行。

示例代码
代码语言:javascript
复制

python
def decorator1(func):
    def wrapper(*args, **kwargs):
        print("Decorator 1 before")
        result = func(*args, **kwargs)
        print("Decorator 1 after")
        return result
    return wrapper

def decorator2(func):
    def wrapper(*args, **kwargs):
        print("Decorator 2 before")
        result = func(*args, **kwargs)
        print("Decorator 2 after")
        return result
    return wrapper

@decorator1
@decorator2
def greet(name):
    print(f"Hello, {name}")

greet("Bob")

在这个示例中,decorator2 首先被应用,其次是 decorator1

结论

装饰器是Python中的一个强大功能,简化了许多常见的编程任务,如日志记录、权限控制、性能优化等。它使得代码更具可读性和可维护性,鼓励模块化和复用性。理解和熟练使用装饰器,可以大大提高开发效率和代码质量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 装饰器简介
  • 装饰器的基本语法
    • 示例代码
    • 装饰器的应用场景
    • 装饰器的嵌套使用
      • 示例代码
      • 结论
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档