「Python 系列」 Python 裝飾器(一)

「Python 系列」 Python 裝飾器(一)

函數

在Python中,函數是一等公民,這就意味著:

  • 函數是對象——它們可以被引用,傳遞給變量並從其他函數返回。
  • 可以在另一個函數中定義函數——inner function ,也可以將其作為參數傳遞給另一個函數。
def say_name():
print("Guido van Rossum")


def say_nationality():
print("Netherlands")


def say(func):
return func


say(say_name)()
say(say_nationality)()

輸出:

Guido van Rossum
Netherlands

在這裡,我們將發送兩個不同的函數引用給say函數用作再次返回引用的參數。

內部又是什麼原理呢:

def say():

def say_name():
print("Guido van Rossum")

def say_nationality():
print("Netherlands")

say_name()
say_nationality()

say()

輸出:

Guido van Rossum
Netherlands

裝飾器

大家可以看到Python 中函數就像其他得對象一樣,現在我們來舉個例子看看Python 裝飾器得魔力。

def say(func):

def employer():
print("Say something about you.")

def say_name():
print("My name is Guido van Rossum.")

def say_nationality():
print("I am from Netherlands.")

def wrapper():
employer()
say_name()
say_nationality()
func()

return wrapper

@say
def start_interview():
print("Real interview Started...")

start_interview()

輸出:

Say something about you.
My name is Guido van Rossum.
I am from Netherlands.
Real interview Started...

在這裡,當我們調用start_interview方法時。它會去裝飾函數say和定義employer,say_name,say_nationality,和wrapper函數,並最終返回的wrapper函數引用,並在調用函數start_interview被調用處調用它。


分享到:


相關文章: