在Python函数装饰器的世界里,你可以轻松地为已有函数添加新功能,而无需修改其源代码。这不仅让代码更整洁、可复用,还体现了Python“优雅”与“简洁”的哲学。本教程专为编程小白设计,一步步带你理解并使用装饰器教程中的核心概念。
简单来说,Python装饰器就是一个函数,它接收另一个函数作为参数,并返回一个新的函数。这个新函数通常会在原函数执行前后添加一些额外的操作,比如日志记录、性能计时、权限验证等。
我们先不使用语法糖(@),而是手动实现一个简单的装饰器:
def my_decorator(func): def wrapper(): print("函数执行前...") func() print("函数执行后...") return wrapperdef say_hello(): print("Hello!")# 手动应用装饰器say_hello = my_decorator(say_hello)say_hello() 运行结果:
函数执行前...Hello!函数执行后...
Python 提供了 @decorator_name 的语法糖,让装饰器的使用更加直观:
def my_decorator(func): def wrapper(): print("【装饰器】开始执行...") func() print("【装饰器】执行完毕。") return wrapper@my_decoratordef greet(): print("你好,世界!")# 直接调用greet() 上面的例子只适用于无参函数。如果原函数有参数,我们需要让 wrapper 接收任意参数:
def log_args(func): def wrapper(*args, **kwargs): print(f"调用函数 {func.__name__},参数为: args={args}, kwargs={kwargs}") result = func(*args, **kwargs) print(f"函数 {func.__name__} 返回: {result}") return result return wrapper@log_argsdef add(a, b): return a + badd(3, 5) 输出:
调用函数 add,参数为: args=(3, 5), kwargs={}函数 add 返回: 8 这是函数装饰器用法中非常常见的场景——测量函数执行时间:
import timedef timer(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"{func.__name__} 耗时: {end - start:.4f} 秒") return result return wrapper@timerdef slow_function(): time.sleep(1) return "完成!"slow_function() 掌握Python装饰器入门知识,不仅能让你写出更专业的代码,还能理解 Flask、Django 等框架中大量使用的装饰器(如 @app.route、@login_required)。它是进阶 Python 开发的必备技能之一。
@ 可以简化装饰器的应用*args 和 **kwargs 让装饰器兼容任意参数的函数现在你已经掌握了 Python函数装饰器 的基本用法!快去尝试为你的项目添加一些实用的装饰器吧。
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210491.html