函數
在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被調用處調用它。