日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python中的裝飾器

在編程中,裝飾器是一種設(shè)計模式,它動態(tài)地向?qū)ο筇砑宇~外的職責(zé)。在 Python 中,一個函數(shù)是一階對象。 因此,Python 中的裝飾器在不修改函數(shù)的情況下,動態(tài)地向函數(shù)添加額外的責(zé)任/功能。

在 Python 中,一個函數(shù)可以作為參數(shù)傳遞給另一個函數(shù)。也可以在另一個函數(shù)內(nèi)部定義一個函數(shù),一個函數(shù)可以返回另一個函數(shù)。

因此,Python 中的裝飾器是一個接收另一個函數(shù)作為參數(shù)的函數(shù)。參數(shù)函數(shù)的行為是由裝飾器擴展的,并沒有實際修改它。可以使用@decorator 語法在函數(shù)上應(yīng)用 decorator 函數(shù)。

讓我們逐步理解 Python 中的裝飾器。

假設(shè)我們有greet()功能,如下所示。

Example: A Function

def greet():
    print('Hello! ', end='') 

現(xiàn)在,我們可以通過將上面的函數(shù)傳遞給另一個函數(shù)來擴展它的功能,而無需修改它,如下所示。

Example: A Function with Argument

def mydecorator(fn):
    fn()
    print('How are you?') 

上圖,mydecorator()函數(shù)以一個函數(shù)為自變量。它調(diào)用參數(shù)函數(shù),還打印一些附加的東西。因此,它擴展了greet()功能的功能,而沒有對其進行修改。 然而,它并不是真正的裝飾者。

Example: Calling Function in Python Shell

>>> mydecorator(greet)
Hello! How are you? 

mydecorator()不是 Python 中的裝飾器。Python 中的裝飾器可以使用@decorator_function_name語法在任何適當(dāng)?shù)暮瘮?shù)上定義,以擴展底層函數(shù)的功能。

以下定義了上述greet()功能的裝飾器。

Example: A Decorator Function

def mydecorator(fn):
    def inner_function():        
        fn()
        print('How are you?')
    return inner_function 

mydecorator()函數(shù)是以函數(shù)(任何不取任何參數(shù)的函數(shù))為參數(shù)的裝飾函數(shù)。 內(nèi)部函數(shù)inner_function()可以訪問外部函數(shù)的參數(shù),所以它在調(diào)用參數(shù)函數(shù)之前或之后執(zhí)行一些代碼來擴展功能。 mydecorator函數(shù)返回一個內(nèi)部函數(shù)。

現(xiàn)在,我們可以使用mydecorator作為裝飾器來應(yīng)用于不接受任何參數(shù)的函數(shù),如下所示。

Example: Applying Decorator

@mydecorator
def greet():
    print('Hello! ', end='') 

現(xiàn)在,調(diào)用上面的greet()函數(shù)會給出如下輸出。

Example: Calling a Decorated Function

>>> greet()
Hello! How are you? 

mydecorator可以應(yīng)用于任何不需要任何參數(shù)的函數(shù)。例如:

Example: Applying Decorator

@mydecorator
def dosomething():
    print('I am doing something.', end='') 

Example: Calling Decorated Function in Python Shell

>>> dosomething()
I am doing something. How are you? 

典型的裝飾函數(shù)如下所示。

Decorator Function Syntax

def mydecoratorfunction(some_function): # decorator function
    def inner_function(): 
        # write code to extend the behavior of some_function()
        some_function() # call some_function
        # write code to extend the behavior of some_function()
    return inner_function # return a wrapper function 

內(nèi)置裝飾器

Python 庫包含許多內(nèi)置裝飾器,作為定義屬性、類方法、靜態(tài)方法等的快捷方式。

裝飾者 描述
@property將方法聲明為屬性的 setter 或 getter 方法。
@classmethod將方法聲明為類的方法,可以使用類名調(diào)用該方法。
@staticmethod將方法聲明為靜態(tài)方法。

接下來了解內(nèi)置 decorator @property。*****


分享文章:Python中的裝飾器
網(wǎng)頁地址:http://www.dlmjj.cn/article/djojchs.html