Python開發【第十三篇】裝飾器

裝飾器

什麼是裝飾器?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 函數名([位置形參], [*元組形參], [命名關鍵字形參] ,[**字典形參]): '文檔字符串' 語句塊

相關文章
相關標籤/搜索