亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

關(guān)于Python的修飾器(一)

系統(tǒng) 1766 0

??? Python對于將函數(shù)作為參數(shù)傳遞給另一個(gè)函數(shù)調(diào)用是非常方便的,只要你在函數(shù)中將調(diào)用的參數(shù)按照函數(shù)處理進(jìn)行調(diào)用,這種操作就能順利完成。如:

?? def S(n):

????????? sum=0

????????? for i in range(n): sum+=i

????????? return sum

?

?? def P(f):

????????? a=eval(input('輸入一個(gè)數(shù)'))

????????? print('數(shù)的累加為:'f(a))

??? 運(yùn)行P(S),即能夠從鍵盤獲得輸入并打印出結(jié)果。這里將函數(shù)S作為參數(shù)傳遞給P是非常方便的。而在P中,之所以將參數(shù)f認(rèn)為是函數(shù),則是因?yàn)閷λ氖褂檬前凑蘸瘮?shù)進(jìn)行的。

??? 在Python中,修飾器是C++等其它語言中沒有的新特性,通過修飾器的定義,可以對一個(gè)對象在其外部通過修飾器對其進(jìn)行修改,而不用修改這個(gè)對象本身。如下:

?? def myDec(f):????????????????????? #定義一個(gè)函數(shù),該函數(shù)以另一個(gè)函數(shù)f作為參數(shù)

????????? if(f()>=5): lambda:return f()*2

????????? else: return lambda:f()

?

?? @myDec?????????????????????????????????? #定義一個(gè)下面的Hello對象的myDec修飾器

?? def Hello():

????????? return eval(input('輸入一個(gè)數(shù)'))

??? 在上面的例子中首先定義了一個(gè)函數(shù)myDec,函數(shù)接收一個(gè)函數(shù)參數(shù)。該函數(shù)就可以被修飾器作用用來修飾其它函數(shù)對象了。

??? 下面定義了一個(gè)函數(shù)Hello,該函數(shù)將myDec作為修飾器。當(dāng)修飾器定義完成后,Python解釋器會(huì)自動(dòng)調(diào)用函數(shù)Hello并將修飾器作用于Hello,即相當(dāng)于進(jìn)行了如下表達(dá)式的函數(shù)調(diào)用:

??? Hello=myDec(Hello)

??? 其結(jié)果是把函數(shù)myDec中的效果施加在了函數(shù)Hello之上。在本例中,如果用戶輸入的數(shù)大于等于5,最后形成的Hello函數(shù)實(shí)際上是對原Hello函數(shù)乘以2,否則就是原Hello函數(shù),從而在沒有修改Hello的基礎(chǔ)上完成了對Hello的修改或者修飾。

通過這個(gè)例子我們可以注意有以下幾個(gè)要點(diǎn):

  1. 對被修飾對象的修改和修飾是由修飾器函數(shù)完成的(本例中的myDec),該函數(shù)由于要對被修飾對象進(jìn)行修飾,所以應(yīng)該首先定義,并接收一個(gè)被修飾對象參數(shù),以便完成對該對象的修飾;
  2. 如例子中所表達(dá)的,修飾器實(shí)際完成的是被修飾對象通過修飾函數(shù)進(jìn)行修飾的操作,即如例子的Hello=myDec(Hello),所以修飾函數(shù)的返回值最終將作用于被修飾對象。所以從邏輯上講,修飾器函數(shù)應(yīng)該返回與被修飾對象相同的對象,如例子中通過無名函數(shù)返回的依然是相類似的函數(shù)。當(dāng)然,理論上講,修飾器函數(shù)完全可以返回其它任何類型的對象,當(dāng)然這樣的結(jié)果實(shí)際上就完全修改了被修飾對象,所以一般不要這么做,以免發(fā)生不可預(yù)料的結(jié)果;
  3. 修飾器只在定義完成后立即執(zhí)行,所以其修飾作用會(huì)立刻發(fā)生,之后只要沒有重新運(yùn)行修飾器定義,該作用會(huì)保持不變。如例子中函數(shù)Hello從鍵盤接收并返回一個(gè)輸入。當(dāng)修飾器定義完成后,Python編輯器會(huì)立即運(yùn)行修飾器,并通過修飾函數(shù)調(diào)用被修飾函數(shù)Hello,要求用戶提供一個(gè)輸入。這時(shí)如果用戶輸入大于等于5,這時(shí)Hello函數(shù)會(huì)被修飾為返回2*用戶輸入的值,之后如果再次運(yùn)行函數(shù)Hello,不管用戶輸入是否大于等于5,都會(huì)返回2*用戶輸入值了。

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 999热精品这里在线观看 | 91国内精品久久久久影院优播 | 免费看真人a一级毛片 | 日韩亚洲一区中文字幕在线 | 免费在线视频一区 | 四虎精品永久免费 | 手机看片欧美 | 伊人网伊人 | 欧美一级a毛片人人dvd | 欧美日韩一区二区三区久久 | 韩国一大片a毛片 | 亚洲精品久久久久综合中文字幕 | 日本中文字幕一区二区有码在线 | 特级毛片免费播放 | 狠狠操狠狠操 | 欧美亚洲国产精品 | 九九99香蕉在线视频美国毛片 | 亚洲色中文字幕在线播放 | 91精品国产91久久久久久青草 | 欧美毛片 | 欧美操操操操 | 午夜主播国产福利视频在线 | 欧美毛片基地 | 欧美日韩在线观看免费 | 四虎成人精品在永久免费 | 精品国精品国产自在久国产不卡 | 中文国产成人久久精品小说 | 新久草在线 | 国产精品久久久久影视青草 | 精品国产综合区久久久久99 | 精品亚洲欧美高清不卡高清 | 欧美性视频xxxxxxxx | 天天综合干 | 亚洲欧美色综合精品 | 99国产精品久久 | 九九亚洲视频 | 久久夜色精品国产欧美 | 性做久久久久久久免费看 | 色综合久久综合网 | 五月伊人网 | www.亚洲一区二区三区 |