python中?@的含義以及基本使用方法
一、表示修飾符。
可以在模塊或者類的定義層內(nèi)對函數(shù)進行修飾。出現(xiàn)在函數(shù)定義的前一行,不允許和函數(shù)定義在同一行。
一個修飾符就是一個函數(shù),它將被修飾的函數(shù)作為參數(shù),并返回修飾后的同名函數(shù)或其他可調(diào)用的東西(如果返回不是一個可調(diào)用的對象那么會報錯)。
例1:
def funA(desA): print("It's funA") def funB(desB): print("It's funB") @funA def funC(): print("It's funC")
運行結(jié)果:
It's funA
例2:
可以看出,該例子中@test等價于 test(xxx()),但是這種寫法你得考慮python代碼的執(zhí)行順序。
def test(func): print("a") return func() @test def xxx(): print('Hello world!')
運行結(jié)果:
a
Hello world!
例3:
為更深刻理解該用法,來個復雜點的嵌套型。
def funA(desA): print("It's funA") print('---') print(desA) desA() print('---') def funB(desB): print("It's funB") @funB @funA def funC(): print("It's funC")
運行結(jié)果:
It's funA
---
<function funC at 0x00000252D2545550>
It's funC
---
It's funB
解析:
- @funB 修飾裝飾器@funA,@funA 修飾函數(shù)定義def funC(),將funC()作為funA()的參數(shù),再將funA(funC())作為funB()的參數(shù)。 執(zhí)行的時候由上而下,先執(zhí)行funA(funC()),再執(zhí)行funB(funA(funC()))。注意,funC()并不執(zhí)行,除非funA()函數(shù)中給出了執(zhí)行funA()的代碼。
- 打印desA,其傳的是funC()的地址,即desA現(xiàn)在為函數(shù)desA()。 執(zhí)行desA()即執(zhí)行funC(),desA=desA()=funC()。
二、表示矩陣乘法。
? ? ? ? 不常用。
例:
import torch n=100 x = torch.ones(n,2) x[:,0].uniform_(-1.,1) # 第一列變換至(-1.,1) 之間 print(x[:5]) # 輸出前5行 a = torch.tensor([3.,2.]) # 一維Tensor print(a) print(a.shape) y = x@a print(y) print(y.shape)
輸出結(jié)果:
tensor([[ 0.8230,? 1.0000],
? ? ? ? [ 0.2427,? 1.0000],
? ? ? ? [-0.7416,? 1.0000],
? ? ? ? [-0.1267,? 1.0000],
? ? ? ? [ 0.7767,? 1.0000]])
tensor([3., 2.])
torch.Size([2])
tensor([ 4.4691,? 2.7281, -0.2249,? 1.6198,? 4.3302,? 3.3386,? 1.9908, -0.8602,
? ? ? ? ?4.9401,? 1.9773,? 4.5304, -0.1322,? 3.9059, -0.6714,? 1.8961,? 3.7886,
? ? ? ? ?0.8241,? 4.4958,? 2.2765,? 2.0459,? 3.6542,? 3.0824,? 2.8941,? 1.0526,
? ? ? ? ?4.8735,? 1.4954,? 3.0208,? 4.0778,? 2.3491,? 2.2261,? 3.1072,? 1.0640,
? ? ? ? ?1.7861, -0.8534,? 3.2532,? 1.5553,? 0.2124,? 3.6449,? 1.6078, -0.1138,
? ? ? ? ?4.2842,? 3.7184,? 2.2547,? 3.4069,? 3.6274,? 0.4879,? 1.4638,? 3.9289,
? ? ? ? ?3.3475,? 4.1895,? 1.5572,? 0.8312,? 2.9297, -0.9266,? 0.4067,? 2.5237,
? ? ? ? ?0.6808,? 4.9553,? 3.3838,? 0.5514,? 4.8429,? 0.0513,? 3.4206,? 0.3634,
? ? ? ? ?4.7817,? 3.0385,? 2.3276, -0.0794,? 3.4981,? 4.3776, -0.8681, -0.4573,
? ? ? ? ?3.6906,? 1.2463,? 1.4817,? 4.0007,? 4.7871,? 2.5638,? 4.2755,? 3.1731,
? ? ? ? ?3.4726,? 2.1015, -0.8896,? 1.4156,? 1.2603,? 4.0047,? 3.3631,? 3.5998,
? ? ? ? ?3.2414, -0.1534,? 3.6266,? 0.3750,? 4.4118, -0.0199,? 1.6172,? 3.2992,
? ? ? ? -0.2325,? 1.8240,? 0.5580,? 2.1420])
torch.Size([100])
總結(jié)
到此這篇關于python中@的含義以及基本使用方法的文章就介紹到這了,更多相關python中@用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決Matplotlib圖表不能在Pycharm中顯示的問題
今天小編就為大家分享一篇解決Matplotlib圖表不能在Pycharm中顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實現(xiàn)
這篇文章主要介紹了python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實現(xiàn) ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-10-10python獲取微信企業(yè)號打卡數(shù)據(jù)并生成windows計劃任務
由于公司的系統(tǒng)用的是Java版本,開通了企業(yè)號打卡之后又沒有預算讓供應商做數(shù)據(jù)對接,所以只能自己搗鼓這個,以下是個人設置的一些內(nèi)容,僅供大家參考2019-04-04利用Chatgpt開發(fā)一款加減乘除計算器(Python代碼實現(xiàn))
這篇文章主要為大家詳細介紹了如何利用Chatgpt開發(fā)一款加減乘除計算器(用Python代碼實現(xiàn)),文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-02-02pytorch關于Tensor的數(shù)據(jù)類型說明
這篇文章主要介紹了pytorch關于Tensor的數(shù)據(jù)類型說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Python編寫通訊錄通過數(shù)據(jù)庫存儲實現(xiàn)模糊查詢功能
數(shù)據(jù)庫存儲通訊錄,要求按姓名/電話號碼查詢,查詢條件只有一個輸入入口,自動識別輸入的是姓名還是號碼,允許模糊查詢。這篇文章主要介紹了Python編寫通訊錄,支持模糊查詢,利用數(shù)據(jù)庫存儲,需要的朋友可以參考下2019-07-07