黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

關于Python的修飾器(一)

系統 1901 0

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

?? def S(n):

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

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

????????? return sum

?

?? def P(f):

????????? a=eval(input('輸入一個數'))

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

??? 運行P(S),即能夠從鍵盤獲得輸入并打印出結果。這里將函數S作為參數傳遞給P是非常方便的。而在P中,之所以將參數f認為是函數,則是因為對它的使用是按照函數進行的。

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

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

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

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

?

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

?? def Hello():

????????? return eval(input('輸入一個數'))

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

??? 下面定義了一個函數Hello,該函數將myDec作為修飾器。當修飾器定義完成后,Python解釋器會自動調用函數Hello并將修飾器作用于Hello,即相當于進行了如下表達式的函數調用:

??? Hello=myDec(Hello)

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

通過這個例子我們可以注意有以下幾個要點:

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

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論