裝飾器:html
裝飾器本質上是一個 Python 函數或類,它能夠讓其餘函數或類在不須要作任何代碼修改的前提下增長額外功能,裝飾器的返回值也是一個函數/類對象。python
有了裝飾器,咱們就能夠抽離出大量與函數功能自己無關的雷同代碼到裝飾器中並繼續重用。歸納的講,裝飾器的做用就是爲已經存在的對象添加額外的功能。閉包
Python的decorator能夠用函數實現,也能夠用類實現。函數
https://foofish.net/python-decorator.html.net
閉包:code
閉包本質上是一個函數,它有兩部分組成,printer
函數和變量 msg
。閉包使得這些變量的值始終保存在內存中。htm
def print_msg(): # print_msg 是外圍函數 msg = "zen of python" def printer(): # printer 是嵌套函數 print(msg) return printer another = print_msg() # 輸出 zen of python another()
通常狀況下,函數中的局部變量僅在函數的執行期間可用,一旦 print_msg()
執行事後,咱們會認爲 msg
變量將再也不可用。然而,在這裏咱們發現 print_msg 執行完以後,在調用 another 的時候 msg 變量的值正常輸出了,這就是閉包的做用,閉包使得局部變量在函數外被訪問成爲可能。對象