python中@符號實例詳解
python中@是什么意思
通常我們所見的@符號是用于郵箱中,而在python中@符號也有著重要的作用:一個是表示修飾符,另一個則是表示矩陣乘法(不常用)。表示修飾符時,可以在模塊或者類的定義層內(nèi)對函數(shù)進行修飾。雖然表示矩陣乘法不常用,但是也是很好的一個方法。值得注意的是@符號的這兩種含義,都是在python3.5以后的。
一、表示修飾符
用做函數(shù)的修飾符,可以在模塊或者類的定義層內(nèi)對函數(shù)進行修飾;
出現(xiàn)在函數(shù)定義的前一行,不允許和函數(shù)定義在同一行。
一個修飾符就是一個函數(shù),它將被修飾的函數(shù)作為參數(shù),并返回修飾后的同名函數(shù)或其他可調(diào)用的東西(如果返回不是一個可調(diào)用的對象那么會報錯)。
#Example 1 def test(func): print("a") return func() @test #從這里可以看出@test等價于 test(xxx()) def xxx(): print('Hello world!')
運行結(jié)果:
a
Hello world!
可以看出,先執(zhí)行test()下的print(“a”),再return func()即返回xxx()函數(shù)。
那么,如果前后連續(xù)出現(xiàn)兩個及以上的@修飾器呢?處理的順序如何?看下面的例子:
#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),也就是把當前函數(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())
運行結(jié)果:
<a>test1<a>
<b>test2<b>
<a><b>test3<b><a>
以上結(jié)果可以看出,函數(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)
運行結(jié)果:
[[18, 14], [62, 66]]
總結(jié)
到此這篇關(guān)于python中@符號實例詳解的文章就介紹到這了,更多相關(guān)python中@詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解python3中用HTMLTestRunner.py報ImportError: No module named ''
這篇文章主要介紹了詳解python3中用HTMLTestRunner.py報ImportError: No module named 'StringIO'如何解決,感興趣的可以了解一下2019-08-08Python EOL while scanning string literal問題解決方法
這篇文章主要介紹了Python EOL while scanning string literal問題解決方法,本文總結(jié)出是數(shù)據(jù)庫數(shù)據(jù)出現(xiàn)問題導致這個問題,需要的朋友可以參考下2015-04-04一條命令解決mac版本python IDLE不能輸入中文問題
本文通過一條命令幫助大家解決mac版本python IDLE無法輸入中文問題,需要的朋友可以參考下2018-05-05python 實現(xiàn)mysql自動增刪分區(qū)的方法
這篇文章主要介紹了python 實現(xiàn)mysql自動增刪分區(qū)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04