近期在讀「流暢的Python」這本書,想把本身的讀書筆記分享給你們,但願能幫到也對這本書感興趣可是沒時間看的各位。(文章中大部分的話和圖片摘錄總結自「流暢的Python」一書,以及python官方網站)python
章節概述:介紹函數裝飾器,和閉包的概念與使用方法
章節結構:緩存
具體內容:閉包
1.定義:函數裝飾器用於標記函數,加強函數的行爲。裝飾器自己是可調用的對象,它的參數是另外一個被裝飾的函數。
2.裝飾方法:可能會處理被裝飾的函數,而後把他返回。或者將其替換成另外一個函數或者可調用對象
3.用法:函數
@decorate def decorated_function_name(): funtion_content def decorat(func): decoration_content
4.執行時間點:被裝飾函數定義後,模塊導入時,而普通的函數是在調用時,也就是運行時執行。
5.標準庫內置裝飾函數,像是property,classmethod,staticmethod,還有functools模塊中的裝飾器
5.1functools.lru_cache,實現了備忘功能,LRU表示Least Recentl Used,緩存不會無限增加的意思,一段時間不用的緩存條目會被扔掉。
5.2functools.singledispatch,把普通函數變成泛函數。
6.疊放裝飾器:一個函數能夠被多個裝飾器同時裝飾。
7.參數化裝飾器:解析源碼中的裝飾器時,Python把被裝飾的函數做爲第一個參數傳給裝飾器函數,經過建立裝飾器工廠函數可讓裝飾器接受別的參數。
8.參數化的註冊裝飾器:爲了便於啓動或者禁用register函數註冊功能,咱們提供可選的active參數,經過true或false決定一個註冊裝飾器的啓用與否。網站
1.一個函數讀取兩個變量的值,局部變量和全局變量
2.局部變量,不須要聲明
3.全局變量,須要用global關鍵字聲明spa
1.解決問題:閉包函數是涉及嵌套函數時產生的問題。
2.定義:閉包是延伸了做用域的函數,其中包含函數定義體中引用,可是再也不定義體中定義的非全局便令,函數是否是匿名的沒有關係,關鍵是他能訪問定義體以外定義的非全局變量。
3.nonlocal:把變量標記爲自由變量
4.形式:code
def outer_func(): local_varaible def inner_func(parameter): inner_func_content return inner_func