【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.pswp.cn/news/904682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904682.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VAE和Stable Diffusion的關系

文章目錄 ? 簡單回顧:什么是 VAE?🔄 Stable Diffusion 和 VAE 的關系:🎯 編碼器:💥 解碼器: 🤔 那 Stable Diffusion 本身是 VAE 嗎?🧠 簡要對比…

PyTorch_點積運算

點積運算要求第一個矩陣 shape:(n, m),第二個矩陣 shape: (m, p), 兩個矩陣點積運算shape為:(n,p) 運算符 用于進行兩個矩陣的點乘運算torch.mm 用于進行兩個矩陣點乘運算,要求輸入的矩陣為3維 (mm 代表 mat, mul)to…

02_JVM

1、JVM虛擬機組成及內存分配 三大部分: 類裝載子系統JVM虛擬機字節碼執行引擎 其中,JVM虛擬機運行時數據區(內存模型)包含五部分:堆、棧(線程)、方法區(元空間)、本地…

基于FPGA控制PCF8591開展ADC采樣,以采樣煙霧模塊輸出模擬電壓為例(IIC通信)

基于FPGA控制PCF8591開展ADC采樣 前言一、芯片手冊閱讀1.設備地址2.字節地址3.IIC通信協議 二、仿真分析三、代碼分析總結視頻演示 前言 這段時間做設計總是遇到一些傳感器模塊輸出模擬電壓,采集模擬電壓進而了解傳感器輸出的濃度占比,在淘寶上找到了一…

在Python和C/C++之間共享std::vector<std::vector<int>>數據

在Python和C/C之間共享std::vector<std::vector>數據 在Python和C/C之間共享嵌套向量數據(std::vector<std::vector<int>>)可以通過幾種方法實現。以下是幾種常見的方法&#xff1a; 方法1: 使用Cython Cython是連接Python和C的很好選擇&#xff0c;它可以…

Linux NVIDIA 顯卡驅動安裝指南(適用于 RHEL/CentOS)

&#x1f4cc; 一、禁用 Nouveau 開源驅動 NVIDIA 閉源驅動與開源的 nouveau 驅動沖突&#xff0c;需先禁用&#xff1a; if [ ! -f /etc/modprobe.d/blacklist-nouveau.conf ]; thenecho -e "blacklist nouveau\noptions nouveau modeset0" | sudo tee /etc/modpr…

Python爬蟲實戰:獲取千庫網各類素材圖片,為設計師提供參考

一、引言 在當今設計領域,豐富的素材積累對設計師而言至關重要。千庫網作為一個素材資源豐富的平臺,擁有海量的各類素材圖片。然而,手動從該網站收集素材不僅耗時,而且效率低下。Python 作為一種功能強大的編程語言,具備豐富的庫和工具,可用于開發高效的爬蟲程序。通過 …

vue截圖-html2canvas

使用html2canvas進行截圖操作 在 Vue 中使用 ??html2canvas?? 將 HTML 元素&#xff08;如包含貝塞爾曲線的 Canvas/SVG&#xff09;轉換為圖片 下載html2canvas npm install html2canvas在頁面中使用&#xff0c;要截取哪個div的內容&#xff0c;先給這個div加一個ref標…

介紹Unity中的Dictionary

在 Unity&#xff08;C#&#xff09;中&#xff0c;Dictionary 是一個非常常用的數據結構&#xff0c;它提供 鍵值對&#xff08;Key-Value Pair&#xff09; 的存儲方式。類似于 Python 的 dict 或 JavaScript 的對象&#xff08;Object&#xff09;&#xff0c;但它是強類型的…

MySQL 常用函數(詳解)

目錄 一、數學函數1.1 四舍五入函數1.2 求絕對值函數二、日期時間函數2.1 獲取當前日期和時間三、字符串函數3.1 字符串拼接函數3.2 提取子字符串函數四、聚合函數4.1 計算平均值函數4.2 計算最大值函數五、轉換函數5.1 類型轉換函數六、總結MySQL 提供了豐富的內置函數,涵蓋了…

SOFA編譯-Ubuntu20.04-SOFA22.12

一、事前說明 單純的編譯sofa是很簡單的&#xff0c;但是想要同時編譯SofaPython3則比較難了&#xff0c;我編譯了v22.12分支&#xff0c;其他版本sofa的編譯也可以參考此篇教程&#xff0c;需注意的是&#xff1a; 1、確定SOFA需要的Python版本&#xff0c;sofa22.12需要的是…

靜態BFD配置

AR2配置 int g0/0/0 ip add 10.10.10.2 quit bfd quit bfd 1 bind peer-ip 10.10.10.1 source-ip 10.10.10.2 auto commit AR1配置 int g0/0/0 ip add 10.10.10.1 int g0/0/1 ip add 10.10.11.1 quit bfd quit bfd 1 bind peer-ip 10.0.12.2 source-ip 10.0.12.1 auto co…

關鍵字where

C# 中的 where 關鍵字主要用在泛型約束&#xff08;Generic Constraints&#xff09;中&#xff0c;目的是對泛型類型參數限制其必須滿足的條件&#xff0c;從而保證類型參數具備特定的能力或特性&#xff0c;增強類型安全和代碼可讀性。 約束寫法說明適用場景舉例C#版本要求w…

Arm核的Ubuntu系統上安裝Wireshark

Arm核的Ubuntu系統上安裝Wireshark 一、安裝wireshark 安裝命令&#xff1a; sudo apt-get install wireshark-qt 如下圖所示&#xff1a; 安裝過程彈出如下界面&#xff1a; 鼠標選擇Yes&#xff0c;點回車鍵確認 安裝完成。 二、打開wireshark 輸入命令行打開wireshark …

編專利或委托他人編專利屬于學術不端行為嗎?

原文鏈接&#xff1a;編專利或委托他人編專利屬于學術不端行為嗎&#xff1f; 自己編專利或委托他人編專利屬于學術不端嗎&#xff1f; 5月4日&#xff0c;一篇題為《針對性護理干預在子宮肌瘤圍手術期的情緒和生活質量臨床應用效果》的論文&#xff0c;受到網友的廣泛議論。…

Music AI Sandbox:打開你的創作新世界

AI 和音樂人的碰撞 其實&#xff0c;Google 早在 2016 年就啟動了一個叫 Magenta 的項目&#xff0c;目標是探索 AI 在音樂和藝術創作上的可能性。一路走來&#xff0c;他們和各種音樂人合作&#xff0c;終于在 2023 年整出了這個 Music AI Sandbox&#xff0c;并且通過 YouTub…

Java游戲服務器開發流水賬(2)開發中Maven的管理

Maven 是一款流行的 Java 項目管理工具&#xff0c;它基于項目對象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的概念來管理項目的構建、依賴和文檔等。游戲服務器開發中也會使用. 項目構建 生命周期管理&#xff1a;Maven 定義了一套清晰的項目構建生…

枚舉 · 例8擴展-校門外的樹:hard

登錄—專業IT筆試面試備考平臺_牛客網 代碼區&#xff1a; #include<algorithm> #include<iostream> #include<vector>using namespace std; struct TREE{int left,right; }; bool compare(const TREE&a,const TREE& b ){if(a.left!b.left){return…

Windows Server 2025 安裝AMD顯卡驅動

運行顯卡驅動安裝程序&#xff0c;會提示出問題。但是此時資源已經解壓 來到驅動路徑 C:\AMD\AMD-Software-Installer\Packages\Drivers\Display\WT6A_INF 打開配置文件&#xff0c;把這兩行替換掉 %ATI% ATI.Mfg, NTamd64.10.0...16299, NTamd64.10.0, NTamd64.6.0, NTamd64.…

為什么 MySQL 用 B+ 樹作為數據的索引,以及在 InnoDB 中數據庫如何通過 B+ 樹索引來存儲數據以及查找數據

http://www.liuzk.com/410.html 索引是一種數據結構&#xff0c;用于幫助我們在大量數據中快速定位到我們想要查找的數據。 索引最形象的比喻就是圖書的目錄了。注意這里的大量&#xff0c;數據量大了索引才顯得有意義&#xff0c;如果我想要在 [1,2,3,4] 中找到 4 這個數據&am…