1. 程式人生 > >閉包/裝飾器

閉包/裝飾器

1.什麼是閉包?

多層函式巢狀,(函式裡面還有定義函式,一般是兩個),往往內層函式會用到外層函式的變數,把內層函式以及外部函式的變數當成一個特殊的物件,這就是閉包。閉包比面向物件更純淨、更輕量,既有資料又有執行資料的程式碼;比普通函式功能更強大,不僅有程式碼還有資料;

 

2.匿名函式、普通函式、閉包、面向物件的區別?

  1). 匿名函式能夠完成基本的簡單功能,傳遞是這個函式的引用 只有功能。

2). 普通函式能夠完成較為複雜的功能,傳遞是這個函式的引用 只有功能。

3). 閉包能夠將較為複雜的功能,傳遞是這個閉包中的函式以及資料,佔用資源比較小。

  4). 物件能夠完成最為複雜的功能,傳遞是資料+功能,但佔用大量空間,浪費資源。

 

 

3.什麼是裝飾器?

利用閉包的基本原理,對一個目標函式進行裝飾,即在執行一個目標函式之前、之後執行一些特定的事情。

 

通用的裝飾器示例如下:

def set_func(func):

         print("---開始進行裝飾")

         def call_func(*args, **kwargs):

                  print("---

這是目標函式之前做的事情----")  #  如果需要的話

                  ret = func(*args, ** kwargs)  # 拆包

        print("---這是目標函式之後做的事情----")  # 如果需要的話

                  return ret  #

如果需要有返回值的話可以加上返回值

         return call_func

 

 

@set_func  # 相當於 test1 = set_func(test1)

def test1(*args, **kwargs):

    """函式內部要做的功能"""

         return "ok"  # 如果需要的話,否則就返回None