python 基礎篇 11 函數進階----裝飾器

來源:互聯網
上載者:User

標籤:封裝   擴充   進階   覆蓋   問題   現在   完成   代碼   內建函式   

11. 前??能-裝飾器初識
本節主要內容:
1. 函數名的運?, 第?類對象
2. 閉包
3. 裝飾器初識

一:函數名的運用:

函數名是一個變數,但他是一個特殊變數,加上括弧可以執行函數.

?. 閉包
什麼是閉包? 閉包就是內層函數, 對外層函數(非全域)的變數的引?. 叫閉包

 

可以使用_clesure_檢測函數是否是閉包  返回cell則是閉包,返回None則不是

 

閉包的好處:

      由它我們可以引出閉包的好處. 由於我們在外界可以訪問內建函式. 那這個時候內部函
數訪問的時間和時機就不?定了, 因為在外部, 我可以選擇在任意的時間去訪問內建函式. 這
個時候. 想?想. 我們之前說過, 如果?個函數執?完畢. 則這個函數中的變數以及局部命名
空間中的內容都將會被銷毀. 在閉包中. 如果變數被銷毀了. 那內建函式將不能正常執?. 所
以. python規定. 如果你在內建函式中訪問了外層函數中的變數. 那麼這個變數將不會消亡.
將會常駐在記憶體中. 也就是說. 使?閉包, 可以保證外層函數中的變數在記憶體中常駐. 這樣做
有什麼好處呢? 非常?的好處. 我們來看?個關於爬?的代碼: 

 

綜上, 閉包的作?就是讓?個變數能夠常駐記憶體. 供後?的程式使?

 三. 裝飾器初識
在說裝飾器之前啊. 我們先說?個軟體設計的原則: 開閉原則, ?被成為開放封閉原則,
你的代碼對功能的擴充是開放的, 你的程式對修改原始碼是封閉的. 這樣的軟體設計思路可以
更好的維護和開發.
開放: 對功能擴充開放
封閉: 對修改代碼封閉

 

執行 warter()就行了

 現在問題?來了. 你這個函數寫好了. 但是由於你添加了功能. 重新建立了個函數. 在這之
前訪問過這個函數的?就必須要修改代碼來訪問新的函數water() 這也要修改代碼. 這個也不
好. 依然違背開閉原則. ?且. 如果你這個函數被?量的?訪問過. 你讓他們所有?都去改. 那
你就要倒黴了. 不?死你就??了.
那怎麼辦才能既不修改原代碼, ?能添加新功能呢? 這個時候我們就需要?個裝飾器了. 裝
飾器的作?就是在不修改原有代碼的基礎上, 給函數擴充功能.

 

 

 1. ?先訪問warter(create_people).

 2. 把你的?標函數傳遞給warter的形參fn. 那麼後?如果執?了fn意味著執?了你的?
標函數create_people
3. warter()執?就?句話. 返回inn
er函數. 這個時候. 程式認為warter()函數執?完. 那麼

前?的create_people函數名被重新覆蓋成inner函數
4. 執?create_people函數. 實際上執?的是inner函數. ?inner中訪問的恰恰使我們最開
始傳遞進去的原始的create_people函數

結論: 我們使?warter函數把create_people給封裝了?下. 在不修改create_people的前提下.
完成了對create_people函數的功能添加

 

 

 

 傳回值和參數我們都搞定了. 接下來給出裝飾器的完整模型代碼(必須記住)

 def warter(fn):

  def inner(*args,**kwargs):

    print("哈哈")

     ret=fn(*args,**kwargs)

    print("呵呵")

    return ret

  reture inner

 

 @warter

def yue():

  print()

yue()

 必須記住,記不住寫100遍

 

python 基礎篇 11 函數進階----裝飾器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.