Python – 關於帶參數的裝飾器的理解

【原創】轉載請註明作者Johnthegreat和本文鏈接

 

關於裝飾器的理解,特別像《盜夢空間》中的進入夢境和從夢境出來的過程,一層一層的深入夢境,然後又一層一層的返回,被帶入夢境的是被裝飾的函數,裝飾器就是使人入夢的工具。

 

上程式碼:

from functools import wraps


def decorator_with_argument(argument=''):
    def outer(func):
        message = argument + func.__name__

        @wraps(func)
        def inner(*args, **kwargs):
            print(message)
            print('This is inner function running')
            return func(*args, **kwargs)

        return inner

    return outer

 

以上是裝飾器的部分。

 

接下來,是帶參數的裝飾器:

@decorator_with_argument("Decorator's argument + ")
def pfunc(arg='default'):
    print('This is pfunc running')
    print(f'This " {arg} " is from pfunc argument')

 

最後,函數的運行:

pfunc("pfunc's argument")

 

函數本身也是帶參數的。輸出結果如下:

Decorator’s argument + pfunc
This is inner function running
This is pfunc running
This ” pfunc’s argument ” is from pfunc argument

Process finished with exit code 0

 

下圖是關於夢境的具體圖示:

20200422231958

 

如果你也有關於裝飾器的有趣的描述,或者對於裝飾器有不同的理解,歡迎交流。

Tags: