【Python从入门到精通】--‘@‘符号的作用

在Python中,@符号主要有三种用途:装饰器(Decorator)矩阵乘法运算符 (Python 3.5+)以及类型提示中的修饰符 (如@typing)。

目录

1.@--装饰器(Decorator)

2.@--矩阵乘法运算符

3.@--类中的特殊用法


1.@--装饰器(Decorator)

最常见的用途,用于修改或扩展函数/类的行为,通过@decorator_name语法实现。

说白了就是函数的多重调用:

python 复制代码
def logger(func):
    def wrapper(*args, **kwargs):
        print(f"调用函数: {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@logger  # 等价于 my_func = logger(my_func)
def my_func(x):
    return x * 2

print(my_func(3))  # 输出: 调用函数: my_func → 6

@logger在函数上面的意思就是my_func作为参数传给logger后再赋值给my_func,

那么我们在调用my_func(3)=logger(my_func(3))=logger(6)=6,

注意这里的my_func是一个函数参数,那如果logger本身有参数怎么办?

python 复制代码
def repeat(n_times):  # 外层接收装饰器参数
    def decorator(func):  # 中层接收被装饰函数
        def wrapper(*args, **kwargs):  # 内层实现逻辑
            for _ in range(n_times):
                result = func(*args, **kwargs)
            return result

        return wrapper

    return decorator


@repeat(n_times=3)  # 传入参数 n_times=3
def greet(name):
    print(f"Hello, {name}!")

#greet("Alice")=repeat(n_times=3)(greet)("Alice")
greet("Alice")
# 输出:
# Hello, Alice!
# Hello, Alice!
# Hello, Alice!

相当于,greet("Alice")=repeat(n_times=3,func=greet("Alice"))介接收了两个参数,原本参数,和修饰器参数

2.@--矩阵乘法运算符

Python 3.5+ 引入了 @ 作为矩阵乘法 运算符,主要用于 numpytorch 计算。

python 复制代码
import numpy as np
A = np.array([[1,  2], [3, 4]])
B = np.array([[5,  6], [7, 8]])
print(A @ B)  # 输出矩阵乘积
# [[19 22]
#  [43 50]]

3.@--类中的特殊用法

在类定义中,@ 主要用于类方法、静态方法和属性装饰器

python 复制代码
class Math:
    @staticmethod
    def add(a, b):
        return a + b

print(Math.add(3, 5))  # 8

8

  • @staticmethod 定义静态方法,不依赖实例,直接通过类调用。
装饰器 作用描述 关键特性 示例场景
@staticmethod 定义静态方法 不依赖实例/类,直接通过类调用 无selfcls参数 工具类方法(如数学计算)
@classmethod 定义类方法 第一个参数是cls 可修改类变量或实现替代构造器 工厂模式、类配置修改
@property 将方法转为属性 只读访问(默认) 需配合@属性名.setter实现写操作 封装私有变量、计算属性
@dataclass 自动生成数据类方法 自动添加__init____repr__等 支持类型注解和默认值 数据容器、DTO对象
@abstractmethod 定义抽象方法 强制子类实现该方法 类必须继承ABC 接口规范、框架设计

,在 Python 里,@ 不是注解,而是装饰器或矩阵运算符。

相关推荐
Coinsheep2 分钟前
SSTI-flask靶场搭建及通关
python·flask·ssti
IT实战课堂小元酱2 分钟前
大数据深度学习|计算机毕设项目|计算机毕设答辩|flask露天矿爆破效果分析系统开发及应用
人工智能·python·flask
码农阿豪3 分钟前
Flask应用上下文问题解析与解决方案:从错误日志到完美修复
后端·python·flask
wqq63108556 分钟前
Python基于Vue的实验室管理系统 django flask pycharm
vue.js·python·django
Q_Q19632884757 分钟前
python大学生爱心校园互助代购网站_nyvlx_django Flask vue pycharm项目
python·django·flask
码农阿豪10 分钟前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
岁岁种桃花儿10 分钟前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
xcLeigh11 分钟前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特11 分钟前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
csbysj202023 分钟前
AngularJS 模块
开发语言