当前位置: 首页 > ai >正文

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

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

目录

1.@--装饰器(Decorator)

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

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


1.@--装饰器(Decorator)

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

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

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 * 2print(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本身有参数怎么办?

def repeat(n_times):  # 外层接收装饰器参数def decorator(func):  # 中层接收被装饰函数def wrapper(*args, **kwargs):  # 内层实现逻辑for _ in range(n_times):result = func(*args, **kwargs)return resultreturn wrapperreturn 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+ 引入了 @ 作为矩阵乘法运算符,主要用于 numpy 或 torch 计算。

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.@--类中的特殊用法

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

class Math:@staticmethoddef add(a, b):return a + bprint(Math.add(3, 5))  # 8

8

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

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

http://www.xdnf.cn/news/4692.html

相关文章:

  • 架空输电线巡检机器人轨迹优化设计
  • 探索网络设备安全:Shodan 的原理与合法应用
  • Early clock flow
  • web 自动化之 selenium+webdriver 环境搭建及原理讲解
  • 图书推荐(协同过滤)算法的实现:基于订单购买实现相似用户的图书推荐
  • Python在自动驾驶实时数据处理中的应用:让AI驾驶更智能、更高效
  • 算法题(142):木材加工
  • .NET中使用HTTPS全解析
  • k8s术语之Horizontal Pod Autoscaling
  • 学习设计模式《八》——原型模式
  • 基于互信息分解表示学习的多模态情感分析
  • Dense 与 MoE 系列模型架构的全面对比与应用策略
  • git可视化工具Fork软件的详细使用教程
  • QTDesinger如何给label加边框
  • QT:获取软件界面窗口的尺寸大小2025.5.8
  • 【特别版】Kubernetes集群安装(1master,2node)
  • 蓝绿发布与金丝雀发布
  • 系统架构设计-真题2024下半年总结
  • Android 位掩码操作(和~和|的二进制运算)
  • 【MySQL】(10)用户和权限管理
  • 基于CNN与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
  • 面试问题总结(回忆版)
  • Matter协议,智能家居生态平台的“共生契约”
  • 【Redis】持久化与事务
  • 机器学习与深度学习
  • 图表制作-折柱混合
  • 【办公类-99-05】20250508 D刊物JPG合并PDF便于打印
  • TensorFlow 2.x入门实战:从零基础到图像分类项目
  • 【数据融合实战手册·应用篇】“数字孪生+视频融合”让智慧城市拥有空间感知
  • 手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复