国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺談python裝飾器探究與參數(shù)的領(lǐng)取

2020-02-16 10:54:57
字體:
供稿:網(wǎng)友

首先上原文:

現(xiàn)在,假設(shè)我們要增強now()函數(shù)的功能,比如,在函數(shù)調(diào)用前后自動打印日志,但又不希望修改now()函數(shù)的定義,這種在代碼運行期間動態(tài)增加功能的方式,稱之為“裝飾器”(Decorator)。

本質(zhì)上,decorator就是一個返回函數(shù)的高階函數(shù)。

Decorator本質(zhì)是高階函數(shù)?

不信邪的我試了下..

def g(): print("這里是G") return "G"@gdef f(): print("這里是F") return 1'''--------------------------------------------line 5, in <module> @gTypeError: g() takes 0 positional arguments but 1 was given>>>'''

運行結(jié)果在注釋里

尷尬了...g被強制塞了個參數(shù),那個參數(shù)應(yīng)該是g"修飾的對象"

修改下繼續(xù).....

def g(f): print("這里是G") return "G"@gdef f(): print("這里是F") return 1'''--------------------------------------------這里是G>>> f()Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> f()TypeError: 'str' object is not callable'''

str對象不能被調(diào)用,,,這里的str只有一個,就是g的返回值

為了驗證下,我把"G"改成了2

結(jié)果是

TypeError: 'int' object is not callable

OK了,大概意思就是,裝飾器首先被"塞"一個參數(shù),然后,返回值還要被調(diào)用一次,然而好像只有函數(shù)才能被調(diào)用,,所以,為了不報錯,裝飾器必須返回一個函數(shù),裝飾器必須是高階函數(shù)......

我表示不服( ̄へ ̄),不就是函數(shù)嗎,g的參數(shù)就是函數(shù),,,騷操作上腦ing

def g(f): print("這里是G") return f@gdef f(): print("這里是F") return 1'''--------------------------------------------這里是G>>> f()這里是F'1''''

運行成功.但是....說好的"打印日志功能"呢,#沒錯"這里是G"就是我想要的日志

疑點一: 打印的"這里是G"是第一行,是在輸入"f()"之前發(fā)生的....

疑點二: 輸入"f()"后,"這里是G"沒打出來.....

#單看g函數(shù),它不算是"高階函數(shù)"

作為成功的例子,它太失敗了┐( ̄ヘ ̄)┌

##好吧,我投降了,負隅頑抗也不怎么有意思.....

閉包告訴我們一個道理,,,為了保證返回值一定是函數(shù),最好的措施就是"在函數(shù)內(nèi)部,現(xiàn)場造一個函數(shù)然后扔出去"

def g(f): print("這里是G") def h():  print('這里是H')  return "H" return h@gdef f(): print("這里是F") return 1'''--------------------------------------------這里是G>>> f()這里是H'H'>>> f()這里是H'H'>>> '''

f函數(shù)不執(zhí)行了,,是的沒錯,我還多試了一次的

另外,兩條日志只有里面的能用......(下文會解釋的)

看了一下書,h函數(shù)返回f()的話,f函數(shù)就能被執(zhí)行了,,,,,個人感覺裝飾器應(yīng)該叫"劫持器"

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建平县| 和田市| 南木林县| 宝应县| 威宁| 台北市| 南部县| 东丽区| 绥德县| 山西省| 樟树市| 大宁县| 临清市| 商洛市| 莆田市| 中阳县| 定襄县| 通许县| 百色市| 文化| 晋州市| 犍为县| 冷水江市| 荥阳市| 贺兰县| 万全县| 龙岩市| 盐亭县| 孟州市| 肇源县| 凤冈县| 阿坝县| 东乌珠穆沁旗| 永福县| 科技| 忻州市| 安溪县| 武威市| 定边县| 洱源县| 陇西县|