python中?@的含義以及基本使用方法
一、表示修飾符。
可以在模塊或者類的定義層內(nèi)對函數(shù)進(jìn)行修飾。出現(xiàn)在函數(shù)定義的前一行,不允許和函數(shù)定義在同一行。
一個(gè)修飾符就是一個(gè)函數(shù),它將被修飾的函數(shù)作為參數(shù),并返回修飾后的同名函數(shù)或其他可調(diào)用的東西(如果返回不是一個(gè)可調(diào)用的對象那么會報(bào)錯(cuò))。
例1:
def funA(desA):
print("It's funA")
def funB(desB):
print("It's funB")
@funA
def funC():
print("It's funC")
運(yùn)行結(jié)果:
It's funA
例2:
可以看出,該例子中@test等價(jià)于 test(xxx()),但是這種寫法你得考慮python代碼的執(zhí)行順序。
def test(func):
print("a")
return func()
@test
def xxx():
print('Hello world!')
運(yùn)行結(jié)果:
a
Hello world!
例3:
為更深刻理解該用法,來個(gè)復(fù)雜點(diǎn)的嵌套型。
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")
運(yùn)行結(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í)行的時(shí)候由上而下,先執(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é)
到此這篇關(guān)于python中@的含義以及基本使用方法的文章就介紹到這了,更多相關(guān)python中@用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用python實(shí)現(xiàn)批量重命名文件的代碼
任務(wù)很簡單,某個(gè)目錄下面有幾千個(gè)文件,某些文件沒有后綴名,現(xiàn)在的任務(wù)就是將所有的沒有后綴名的文件加上后綴名,python有現(xiàn)成的函數(shù)可以實(shí)現(xiàn),但是在實(shí)現(xiàn)過程中遇到幾個(gè)問題,分享一下解決方法2012-05-05
使用python實(shí)現(xiàn)ftp的文件讀寫方法
今天小編就為大家分享一篇使用python實(shí)現(xiàn)ftp的文件讀寫方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python GUI庫圖形界面開發(fā)之PyQt5信號與槽事件處理機(jī)制詳細(xì)介紹與實(shí)例解析
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽事件處理機(jī)制詳細(xì)介紹與實(shí)例解析,需要的朋友可以參考下2020-03-03
Python實(shí)現(xiàn)根據(jù)日期獲取當(dāng)天凌晨時(shí)間戳的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)根據(jù)日期獲取當(dāng)天凌晨時(shí)間戳的方法,涉及Python針對日期與時(shí)間戳的相關(guān)轉(zhuǎn)換、運(yùn)算等操作技巧,需要的朋友可以參考下2019-04-04
PyTorch使用tensorboard的SummaryWriter報(bào)錯(cuò)問題解決方案
PyTorch使用tensorboard可以顯示網(wǎng)絡(luò)運(yùn)行情況,但偶爾使用SummaryWriter時(shí)遇到Segmentation fault錯(cuò)誤,這篇文章主要介紹了PyTorch使用tensorboard的SummaryWriter報(bào)錯(cuò)問題解決方案,需要的朋友可以參考下2024-06-06
python監(jiān)控windows服務(wù)器的進(jìn)程和服務(wù)
這篇文章主要為大家詳細(xì)介紹了如何使用python監(jiān)控windows服務(wù)器的進(jìn)程和服務(wù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
使用Python實(shí)現(xiàn)管理系統(tǒng)附源碼
這篇文章主要為大家介紹了Python實(shí)現(xiàn)管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
python在html中插入簡單的代碼并加上時(shí)間戳的方法
今天小編就為大家分享一篇python在html中插入簡單的代碼并加上時(shí)間戳的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10

