在 Python 中,@ 语法通常用于 装饰器(decorator)。装饰器是一种特殊的语法,用于在不修改函数或类代码的情况下,扩展其功能。以下是对装饰器的一些基础介绍,帮助你快速入门:

  1. 什么是装饰器?

装饰器本质上是一个 高阶函数,它接受一个函数或类作为输入,返回一个增强功能后的新函数或类。

使用 @decorator_name 的语法糖(syntactic sugar),你可以轻松地将装饰器应用于函数或类,而无需手动调用装饰器函数。

  1. 装饰器的基本结构

以下是一个简单的装饰器示例:

# 定义装饰器函数
def my_decorator(func):
    def wrapper():
        print("这是在函数执行前添加的代码")
        func()  # 执行原函数
        print("这是在函数执行后添加的代码")
    return wrapper

# 使用装饰器(手动调用)
def my_function():
    print("这是原始函数的代码")

decorated_function = my_decorator(my_function)
decorated_function()

# 输出:
# 这是在函数执行前添加的代码
# 这是原始函数的代码
# 这是在函数执行后添加的代码
  1. 使用 @ 语法糖

使用 @ 可以直接将装饰器绑定到目标函数,而无需手动调用:

# 定义装饰器
def my_decorator(func):
    def wrapper():
        print("这是在函数执行前添加的代码")
        func()
        print("这是在函数执行后添加的代码")
    return wrapper

# 使用 @ 语法糖
@my_decorator
def my_function():
    print("这是原始函数的代码")

my_function()

# 输出:
# 这是在函数执行前添加的代码
# 这是原始函数的代码
# 这是在函数执行后添加的代码
  1. 带参数的装饰器

如果目标函数需要参数,可以调整装饰器来支持:

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("开始执行函数...")
        result = func(*args, **kwargs)  # 支持传递参数
        print("函数执行完毕")
        return result
    return wrapper

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

print(add(3, 4))

# 输出:
# 开始执行函数...
# 函数执行完毕
# 7
  1. 多个装饰器叠加

可以叠加多个装饰器,从上到下依次应用:

def decorator1(func):
    def wrapper():
        print("装饰器1: 开始")
        func()
        print("装饰器1: 结束")
    return wrapper

def decorator2(func):
    def wrapper():
        print("装饰器2: 开始")
        func()
        print("装饰器2: 结束")
    return wrapper

@decorator1
@decorator2
def my_function():
    print("这是函数的主体内容")

my_function()

# 输出:
# 装饰器1: 开始
# 装饰器2: 开始
# 这是函数的主体内容
# 装饰器2: 结束
# 装饰器1: 结束
  1. 应用场景

装饰器非常灵活,常见应用场景包括:
1. 日志记录:在函数执行前后打印日志。
2. 性能计时:记录函数执行时间。
3. 权限校验:在执行函数前检查用户权限。
4. 缓存:在多次调用时返回缓存结果。
5. 事务管理:如数据库的事务处理。

  1. 进阶:带参数的装饰器

如果装饰器本身需要参数,可以再嵌套一层函数:

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

@repeat(3)
def say_hello():
    print("你好!")

say_hello()

# 输出:
# 你好!
# 你好!
# 你好!

总结

装饰器是 Python 中非常强大的功能,可以在不修改原函数代码的情况下扩展功能。其核心思想是:
1. 将一个函数作为输入。
2. 在函数执行前后添加额外功能。
3. 返回一个增强后的函数。

如果你想深入了解或有具体的使用需求,可以随时告诉我,我可以结合实际案例详细讲解!