網站首頁 編程語言 正文
python中@是什么意思
通常我們所見的@符號是用于郵箱中,而在python中@符號也有著重要的作用:一個是表示修飾符,另一個則是表示矩陣乘法(不常用)。表示修飾符時,可以在模塊或者類的定義層內對函數進行修飾。雖然表示矩陣乘法不常用,但是也是很好的一個方法。值得注意的是@符號的這兩種含義,都是在python3.5以后的。
一、表示修飾符
用做函數的修飾符,可以在模塊或者類的定義層內對函數進行修飾;
出現在函數定義的前一行,不允許和函數定義在同一行。
一個修飾符就是一個函數,它將被修飾的函數作為參數,并返回修飾后的同名函數或其他可調用的東西(如果返回不是一個可調用的對象那么會報錯)。
#Example 1
def test(func):
print("a")
return func()
@test #從這里可以看出@test等價于 test(xxx())
def xxx():
print('Hello world!')
運行結果:
a
Hello world!
可以看出,先執行test()下的print(“a”),再return func()即返回xxx()函數。
那么,如果前后連續出現兩個及以上的@修飾器呢?處理的順序如何?看下面的例子:
#Example 2
def FA(fn):
def warp():
return "<a>"+fn()+"<a>"
return warp
def FB(fn):
def warp():
return "<b>"+fn()+"<b>"
return warp
@FA #相當于makebold(test1),也就是把當前函數作為入參傳過去
def test1():
return "test1"
@FB
def test2():
return "test2"
@FA
@FB
def test3(): #函數和裝飾器是倒著執行的,從下往上,從內而外,一層層執行
return "test3"
print(test1())
print(test2())
print(test3())
運行結果:
<a>test1<a>
<b>test2<b>
<a><b>test3<b><a>
以上結果可以看出,函數前面有兩個及以上裝飾器時,先執行函數,返回的值作為參數傳入上一層即FA(),FA()返回的值傳入FB(),最終得到FB()返回的值。
二、表示矩陣乘法
#Example 3
class Mat(list):
def __matmul__(self, B):
A = self
return Mat([[sum(A[i][k]*B[k][j] for k in range(len(B)))
for j in range(len(B[0])) ] for i in range(len(A))])
A = Mat([[1,3],[7,5]])
B = Mat([[6,8],[4,2]])
print(A @ B)
運行結果:
[[18, 14], [62, 66]]
總結?
原文鏈接:https://blog.csdn.net/ningqingzy/article/details/126122078
相關推薦
- 2022-05-24 淺談C#中Action和Func回調的常用方式_C#教程
- 2022-09-13 Golang優雅保持main函數不退出的辦法_Golang
- 2022-12-28 詳解Go語言strconv與其他基本數據類型轉換函數的使用_Golang
- 2022-12-01 修改Nginx源碼實現worker進程隔離實現詳解_nginx
- 2023-04-23 解讀unsafe.Pointer和uintptr的區別_Golang
- 2022-07-31 如何理解C++指針常量和常量指針_C 語言
- 2022-12-21 PyGame實現初始化導入所有模塊方法詳解_python
- 2023-05-20 React組件的用法概述_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支