Python 装饰器:给你的函数“包个包装”

简介: Python 装饰器:给你的函数“包个包装”

Python 装饰器:给你的函数“包个包装”

你是否想过,在不修改原有代码的情况下,给函数添加新功能?Python的装饰器正是为此而生。它就像给礼物包上包装纸——礼物本身没变,但外观和体验升级了。

什么是装饰器?

装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。这种“函数套函数”的模式,让你能轻松实现日志记录、性能测试、权限校验等通用功能。

动手写个简单装饰器

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"开始执行 {func.__name__}")
        result = func(*args, **kwargs)
        print(f"{func.__name__} 执行完毕")
        return result
    return wrapper

@logger
def say_hello(name):
    print(f"你好,{name}!")

say_hello("世界")  # 自动记录执行日志

带参数的装饰器

通过再包一层函数,装饰器也能接收参数:

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def greet():
    print("Hello!")

为什么值得学习?

装饰器体现了Python的优雅哲学。它减少了重复代码,让核心逻辑保持简洁。Flask的路由@app.route('/')、Django的登录校验@login_required,都是装饰器的经典应用。

掌握装饰器,你会更懂Python的“语法糖”之美——复杂功能也能写得如此简洁明了。

相关文章
|
7月前
|
安全 算法 网络安全
筑牢行业安全防线:游戏盾破解游戏、直播、金融领域安全困局
在数字经济高速发展的当下,游戏、直播、金融等行业已成为数字经济的核心支柱,但随之而来的安全威胁也日益严峻。DDoS 攻击、CC 攻击、数据泄露等问题持续侵蚀行业发展根基,而游戏盾作为针对性的安全防护解决方案,凭借创新技术架构与核心功能,正为各行业筑起坚不可摧的安全屏障。
369 7
|
Python
李峋同款爱心Python代码版来了
李峋同款爱心Python代码版来了
10971 132
李峋同款爱心Python代码版来了
|
11月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
1223 2
|
关系型数据库 TensorFlow 算法框架/工具
Docker技术概论(4):Docker CLI 基本用法解析
Docker技术概论(4):Docker CLI 基本用法解析
1554 1
|
测试技术 索引 Python
|
存储 安全 Unix
Syslog 管理工具
Syslog是一种基于TCP/IP网络传输日志消息的标准协议,广泛应用于路由器、交换机、防火墙及Unix/Linux服务器等设备的日志管理。通过标准化的消息格式,Syslog实现了集中化日志收集、存储与分析,有助于提升网络性能、减少系统停机时间并强化安全策略。其核心组件包括Syslog侦听器(接收日志)、数据库(存储与查询)和过滤工具(分析特定日志)。此外,Syslog支持8个优先级分类,便于快速定位关键问题。借助日志管理工具如EventLog Analyzer,管理员可实现实时告警、日志归档、合规性报告等功能,从而更高效地监控和维护网络基础设施。
1497 2
|
安全 Unix Linux
LD_PRELOAD劫持(超详细篇)
LD_PRELOAD劫持(超详细篇)
2481 1
|
Python
Python实用记录(十一):出现科学计数法如何在代码中恢复
本文介绍了如何在Python中处理科学计数法,包括如何将科学计数法转换为普通数字,以及如何设置NumPy的print选项来避免科学计数法的显示。
493 1
|
API
No module named 'plotly.graph_objects'问题解决
No module named 'plotly.graph_objects'问题解决
811 0
No module named 'plotly.graph_objects'问题解决