Python裝飾器使用技巧

裝飾器的概念

Python的裝飾器就是一個嵌套函數,它可以讓其他函數在不需要做任何代碼變動的狀態下增加額外的功能,裝飾器的返回值也是一個函數對象。它經常用於有統一性需求的場景,比如:插入日誌、事務處理、緩存、權限校驗等場景。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函數功能本身無關的相同性質代碼多次利用。

裝飾器的用法

代碼如下:

# -*- coding:utf-8 -*-

__author__ = 'Evan'


# 二層裝飾器
def decorator(func):  # 執行函數
    def wrapper(*args, **kwargs):  # 函數的實參
        result = dict()
        result['from_func_parameter'] = [args or kwargs]
        result['from_func_return_value'] = func(*args, **kwargs)
        return result
    return wrapper


# 三層裝飾器
def full_decorator(value=None):  # 裝飾器的實參
    def decorator(func):  # 執行函數
        def wrapper(*args, **kwargs):  # 函數的實參
            result = dict()
            result['from_func_parameter'] = [args or kwargs]
            result['from_func_return_value'] = func(*args, **kwargs)
            result['from_decorator_parameter'] = value
            return result
        return wrapper
    return decorator


@decorator
def example1(*args):
    return 'hi {}'.format(args)


@full_decorator('Hello World!')
def example2(*args):
    return 'hi {}'.format(args)


if __name__ == '__main__':
    print('二層裝飾器結果:')
    print(example1('example1'))
    print('三層裝飾器結果:')
    print(example2('example2'))

執行結果:

二層裝飾器結果:
{'from_func_parameter': [('example1',)], 'from_func_return_value': "hi ('example1',)"}
三層裝飾器結果:
{'from_func_parameter': [('example2',)], 'from_func_return_value': "hi ('example2',)", 'from_decorator_parameter': 'Hello World!'}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章