Python 閉包 與 裝飾器

運行結果如下:


閉包的定義:在函數內部再定義一個函數,并且這個函數用到了外邊函數的變量,那么將這個函數以及用到的一些變量稱之為閉包

1.閉包似優化了變量,原來需要類對象完成的工作,閉包也可以完成

2.由于閉包引用了外部函數的局部變量,則外部函數的局部變量沒有及時釋放,消耗內存



裝飾器的定義:裝飾器,功能就是在運行原來功能基礎上,加上一些其它功能,比如權限的驗證,比如日志的記錄等等。不修改原來的代碼,進行功能的擴展。

比如java中的動態代理,python的注解裝飾器

其實python的裝飾器,是修改了代碼


例子一:

@w1?內部會執行以下操作

執行w1函數 ,并將 @w1 下面的函數名作為w1函數的參數,即:@w1 等價于 w1(f1) 所以,內部就會去執行。 ??

w1的返回值;將執行完的w1函數返回值 賦值 給@w1下面的函數的函數名f1 即 將w1的返回值再重新賦值給 f1? ,即 ?f1()=inner()


先將f1賦值給參數,inner賦值給f1,這樣f1( )調用的就是inner( ),inner的返回值就是func,func( )調用的就是外部的這個函數。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.1==,is的使用 ·is是比較兩個引用是否指向了同一個對象(引用比較)。 ·==是比較兩個對象是否相等。 1...
    TENG書閱讀 745評論 0 0
  • 本文為《爬著學Python》系列第四篇文章。從本篇開始,本專欄在順序更新的基礎上,會有不規則的更新。 在Pytho...
    SyPy閱讀 2,521評論 4 11
  • 呵呵!作為一名教python的老師,我發現學生們基本上一開始很難搞定python的裝飾器,也許因為裝飾器確實很難懂...
    TypingQuietly閱讀 19,608評論 26 186
  • 在學習 Python 的時候,慶幸自己有 JavaScript 的基礎,在學習過程中,發現許多相似的地方,如導包的...
    柏丘君閱讀 1,225評論 2 8
  • Python的裝飾器的英文名叫Decorator,要對一個已有的模塊做一些“修飾工作”,所謂修飾工作就是想給現有的...
    Spareribs閱讀 679評論 1 11