什麼是裝飾器?python
裝飾器是一個函數,主要做用是用來給包裝另外一個函數或者類函數
包裝的目的是不改變原函數名(或類名)的狀況下改變或添加被包裝對象的功能code
是指裝飾器是一個函數,傳入的是一個函數,返回的也是一個函數對象
語法:文檔
def 裝飾器函數名(參數): 語句塊 return 函數對象 @張詩琪函數名 def 函數名(形參列表): 語句塊
示例:字符串
# 此示例示意裝飾器函數的定義方式及裝飾器來裝飾另外一個函數 # 的語法 def mydeco(fn): def fx(): print("++++++++++++++++") print('----------------') return fx def myfunc(): '''此函數將做爲被裝飾函數''' print("myfunc被調用") # 原理是讓myfunc從新綁定mydeco返回回來的函數 myfunc = mydeco(myfunc) myfunc() myfunc() myfunc()
# 此示例示意裝飾器函數的定義方式及裝飾器來裝飾另外一個函數 # 的語法 def mydeco(fn): def fx(): print("++++++++++++++++") print('----------------') return fx @mydeco def myfunc(): '''此函數將做爲被裝飾函數''' print("myfunc被調用") # myfunc上的@mydeco 等同於在 # 此處加上 myfunc=mydeco(myfunc) myfunc() myfunc() myfunc()
# 此示例示意裝飾器函數的定義方式及裝飾器來裝飾另外一個函數 # 的語法 def mydeco(fn): def fx(): print("++++++++++++++++") fn() # 調用之前的被裝飾函數 print('----------------') return fx @mydeco def myfunc(): '''此函數將做爲被裝飾函數''' print("myfunc被調用") myfunc() myfunc() myfunc()
# 此示例示意裝飾器的用途和做用 # 模擬銀行項目 # 業務: 存錢和取錢 # ----- 小李如下小寫寫的裝飾器----- def privileged_check(fn): def fx(n, yuan): print("正在檢查權限..... OK!") fn(n, yuan) # 調用被裝飾函數 return fx def send_message(fn): def fy(n, x): fn(n, x) print("正在發送給...", n) return fy # ------ @privileged_check def savemoney(name, x): print(name, '存錢', x, "元") @privileged_check @send_message def withdraw(name, x): print(name, "取錢", x, "元") # ---------- savemoney("小王", 200) savemoney("小趙", 400) withdraw("小錢", 500)
函數內第一次末賦值給任何變量的字符串是此函數的文檔字
符串it
語法:class
def 函數名(參數列表): '函數的文檔字符串' 語句塊
示例:變量
def hello(name): '''這是一個向別人問好的函數 name 綁定人的姓名 ''' pass
說明:
文檔字符串一般用來講明本函數的功能的使用方法
函數的文檔字符串綁定在函數對象的__doc__ 屬性上原理
函數的 doc 屬性
__doc__屬性用於綁定函數的文檔字符串
函數定義語句的完整的語法: [@裝飾器名1] [@裝飾器名2] ... def 函數名([位置形參], [*元組形參], [命名關鍵字形參] ,[**字典形參]): '文檔字符串' 語句塊