python中@符號(hào)實(shí)例詳解
python中@是什么意思
通常我們所見的@符號(hào)是用于郵箱中,而在python中@符號(hào)也有著重要的作用:一個(gè)是表示修飾符,另一個(gè)則是表示矩陣乘法(不常用)。表示修飾符時(shí),可以在模塊或者類的定義層內(nèi)對(duì)函數(shù)進(jìn)行修飾。雖然表示矩陣乘法不常用,但是也是很好的一個(gè)方法。值得注意的是@符號(hào)的這兩種含義,都是在python3.5以后的。
一、表示修飾符
用做函數(shù)的修飾符,可以在模塊或者類的定義層內(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)鬟^去 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)文章
詳解python3中用HTMLTestRunner.py報(bào)ImportError: No module named ''
這篇文章主要介紹了詳解python3中用HTMLTestRunner.py報(bào)ImportError: No module named 'StringIO'如何解決,感興趣的可以了解一下2019-08-08對(duì)python中return和print的一些理解
最近看到視頻中講到python中的print和return的區(qū)別,感到一些迷惑,所以自己上手實(shí)踐了一把,下面這篇文章主要給大家介紹了關(guān)于對(duì)python中return和print的一些理解,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08Python EOL while scanning string literal問題解決方法
這篇文章主要介紹了Python EOL while scanning string literal問題解決方法,本文總結(jié)出是數(shù)據(jù)庫數(shù)據(jù)出現(xiàn)問題導(dǎo)致這個(gè)問題,需要的朋友可以參考下2015-04-04一條命令解決mac版本python IDLE不能輸入中文問題
本文通過一條命令幫助大家解決mac版本python IDLE無法輸入中文問題,需要的朋友可以參考下2018-05-05python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法
這篇文章主要介紹了python 實(shí)現(xiàn)mysql自動(dòng)增刪分區(qū)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04