You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编程中@符号的作用是什么?遇到@Square用法无法理解

Python中@符号的功能详解

在Python里,@是**装饰器(Decorator)**的语法糖,用来简洁地给函数或类添加额外功能,不用修改原对象的代码。你看到的@Square,就是把它下面定义的函数(或类)传给名为Square的装饰器处理。

核心作用

装饰器的本质是一个可调用对象(函数或类),它接收被装饰的对象作为参数,返回一个新的对象(通常是包装了原对象的函数或实例),从而实现:

  • 日志记录
  • 参数校验
  • 结果缓存
  • 权限控制
  • 功能扩展(比如你看到的Square,大概率是用来计算原函数返回值的平方)

实际示例:函数装饰器

假设Square是一个自定义函数装饰器,逻辑大概是这样:

def Square(func):
    # 定义包装函数,增强原函数功能
    def wrapper(*args, **kwargs):
        original_result = func(*args, **kwargs)
        return original_result ** 2
    return wrapper

# 用@Square装饰add函数
@Square
def add(a, b):
    return a + b

# 调用add时,实际执行的是wrapper函数
print(add(2, 3))  # 输出25,即(2+3)的平方

这里的@Square完全等价于add = Square(add)——把原add函数传给Square,用它返回的wrapper函数替换原来的add。

实际示例:类装饰器

Square也可能是一个类装饰器,写法略有不同但作用一致:

class Square:
    def __init__(self, func):
        self.func = func
    
    # 实现__call__方法,让类实例能像函数一样调用
    def __call__(self, *args, **kwargs):
        result = self.func(*args, **kwargs)
        return result ** 2

@Square
def multiply(a, b):
    return a * b

print(multiply(2, 3))  # 输出36,即(2*3)的平方

总结

@符号本身只是语法糖,核心是它后面的装饰器对象。@Square的作用就是自动把下方的函数/类传入Square处理,生成一个增强版的对象替代原对象,实现代码复用和功能扩展。

内容的提问来源于stack exchange,提问作者ArchaeonSeq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:15:32