Python基礎知識

1. python裝飾器html

https://foofish.net/python-decorator.htmlpython

歸納來講,裝飾器的做用就是爲已經存在的對象(類或函數)添加額外的功能。編程

能夠使用以下的方式:(簡單的裝飾器)app

def use_logging(func):

    def wrapper():
        logging.warn("%s is running" % func.__name__)
        return func()   # 把 foo 當作參數傳遞進來時,執行func()就至關於執行foo()
    return wrapper

def foo():
    print('i am foo')

foo = use_logging(foo)  # 由於裝飾器 use_logging(foo) 返回的時函數對象 wrapper,這條語句至關於  foo = wrapper
foo()  

解釋use_logging 就是一個裝飾器,它一個普通的函數,它把執行真正業務邏輯的函數 func 包裹在其中看起來像 foo 被 use_logging 裝飾了同樣,use_logging 返回的也是一個函數,這個函數的名字叫 wrapper。在這個例子中,函數進入和退出時 ,被稱爲一個橫切面,這種編程方式被稱爲面向切面的編程函數

使用python裝飾器的語法糖(@ 符號就是裝飾器的語法糖,它放在函數開始定義的地方)能夠省略最後一步「賦值」的操做:spa

def use_logging(func):

    def wrapper():
        logging.warn("%s is running" % func.__name__)
        return func()
    return wrapper

@use_logging def foo():
    print("i am foo")

foo()

:裝飾器在 Python 使用如此方便都要歸因於 Python 的函數能像普通的對象同樣能做爲參數傳遞給其餘函數,能夠被賦值給其餘變量,能夠做爲返回值,能夠被定義在另一個函數內。.net

還有帶參數的裝飾器、類裝飾器等等,詳見上面推薦的博客。code

相關文章
相關標籤/搜索