1. 程式人生 > >python全棧脫產第11天

python全棧脫產第11天

方式 傳參 全棧 int 運行 參數 新功能 一個 dex

裝飾器

  定義:器是指具備某一功能的工具,裝飾指的是為被裝飾器對象添加新功能,所以裝飾器就是為被裝飾對象添加新功能的工具

    註意:裝飾器本身可以是任意可調用的對象,被裝飾器的對象也可以是任意可調用對象

  用處:開放封閉原則:封閉指的是對修改封閉,對擴展開放

  遵循兩大原則:1.不修改被裝飾對象的源代碼

         2.不修改被裝飾對象的調用方式

  目標:在遵循兩大原則的前提下為被裝飾對象添加上新功能

  用法:

  def foo(func):

    def wrapper(*args,**kwargs):

      res=func(*args,**kwargs)

    return res

  return wrapper

  裝飾器的語法糖:在被裝飾對象正上方單獨一行寫@裝飾器的名字

        原理:python解釋器一旦運行到@裝飾器的名字,就會調用裝飾器,然後將被裝飾函數的地址當做參數傳給裝飾器,最後將裝飾器運行的結果賦值給原函數名

  

  def foo(func):

    def wrapper(*args,**kwargs):

      res=func(*args,**kwargs)

    return res

  return wrapper

  @foo()

  def index():

    print(xxx)

  index()

  疊加多個裝飾:解釋@語法的時候是自下而上,執行裝飾器內的函數是自上而下

  有參裝飾器:需要在裝飾器外面再套一個函數用於傳參  

def outter1(x,y,z):
def outter2(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
return res
return wrapper
return outter2  
  wraps裝飾器:導入wraps模塊,應加在裝飾器最內層的函數上,@wraps(func),用於將裝飾器內函數偽裝成和被裝飾對象一樣

python全棧脫產第11天