python中@符號(hào)實(shí)例詳解
python中@是什么意思
通常我們所見(jiàn)的@符號(hào)是用于郵箱中,而在python中@符號(hào)也有著重要的作用:一個(gè)是表示修飾符,另一個(gè)則是表示矩陣乘法(不常用)。表示修飾符時(shí),可以在模塊或者類(lèi)的定義層內(nèi)對(duì)函數(shù)進(jìn)行修飾。雖然表示矩陣乘法不常用,但是也是很好的一個(gè)方法。值得注意的是@符號(hào)的這兩種含義,都是在python3.5以后的。
一、表示修飾符
用做函數(shù)的修飾符,可以在模塊或者類(lèi)的定義層內(nèi)對(duì)函數(shù)進(jìn)行修飾;
出現(xiàn)在函數(shù)定義的前一行,不允許和函數(shù)定義在同一行。
一個(gè)修飾符就是一個(gè)函數(shù),它將被修飾的函數(shù)作為參數(shù),并返回修飾后的同名函數(shù)或其他可調(diào)用的東西(如果返回不是一個(gè)可調(diào)用的對(duì)象那么會(huì)報(bào)錯(cuò))。
#Example 1
def test(func):
print("a")
return func()
@test #從這里可以看出@test等價(jià)于 test(xxx())
def xxx():
print('Hello world!')
運(yùn)行結(jié)果:
a
Hello world!
可以看出,先執(zhí)行test()下的print(“a”),再return func()即返回xxx()函數(shù)。
那么,如果前后連續(xù)出現(xiàn)兩個(gè)及以上的@修飾器呢?處理的順序如何?看下面的例子:
#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 #相當(dāng)于makebold(test1),也就是把當(dāng)前函數(shù)作為入?yún)鬟^(guò)去
def test1():
return "test1"
@FB
def test2():
return "test2"
@FA
@FB
def test3(): #函數(shù)和裝飾器是倒著執(zhí)行的,從下往上,從內(nèi)而外,一層層執(zhí)行
return "test3"
print(test1())
print(test2())
print(test3())
運(yùn)行結(jié)果:
<a>test1<a>
<b>test2<b>
<a><b>test3<b><a>
以上結(jié)果可以看出,函數(shù)前面有兩個(gè)及以上裝飾器時(shí),先執(zhí)行函數(shù),返回的值作為參數(shù)傳入上一層即FA(),F(xiàn)A()返回的值傳入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)
運(yùn)行結(jié)果:
[[18, 14], [62, 66]]
總結(jié)
到此這篇關(guān)于python中@符號(hào)實(shí)例詳解的文章就介紹到這了,更多相關(guān)python中@詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python讀取HDFS目錄下的所有文件的實(shí)現(xiàn)示例
HDFS是Apache Hadoop的分布式文件系統(tǒng),本文主要介紹了Python讀取HDFS目錄下的所有文件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
利用pandas如何實(shí)現(xiàn)類(lèi)似sql中的left join操作
這篇文章主要介紹了利用pandas如何實(shí)現(xiàn)類(lèi)似sql中的left join操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5信號(hào)與槽的高級(jí)使用技巧裝飾器信號(hào)與槽詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5信號(hào)與槽的高級(jí)使用技巧裝飾器信號(hào)與槽詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03
Python使用Numpy實(shí)現(xiàn)Kmeans算法的步驟詳解
將物理或抽象對(duì)象的集合分成由類(lèi)似的對(duì)象組成的多個(gè)類(lèi)的過(guò)程被稱(chēng)為聚類(lèi)。這篇文章主要介紹了Python使用Numpy實(shí)現(xiàn)Kmeans算法,需要的朋友可以參考下2021-11-11
pytorch教程網(wǎng)絡(luò)和損失函數(shù)的可視化代碼示例
這篇文章主要介紹了pytorch教程中網(wǎng)絡(luò)和損失函數(shù)的可視化,文中附含詳細(xì)的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09
python數(shù)據(jù)庫(kù)如何連接SQLite詳解
這篇文章主要介紹了Python實(shí)現(xiàn)連接SQLite數(shù)據(jù)庫(kù)的方法,在Python數(shù)據(jù)庫(kù)編程中有著廣泛的應(yīng)用,需要的朋友可以參考下,希望能給你帶來(lái)幫助2021-08-08
如何通過(guò)Python實(shí)現(xiàn)標(biāo)簽云算法
這篇文章主要介紹了如何通過(guò)Python實(shí)現(xiàn)標(biāo)簽云算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

