「Python系列」 Python 中函數和裝飾器(一)


「Python系列」 Python 中函數和裝飾器(一)

Python 是一種強大的語言,並且內置了很多好用的特性。裝飾器就是其中最常用之一。你可能經常會在Python代碼中看到類似如下的例子:

<code>@staticmethod
def decorated_method():
print("this method uses a decorator")/<code>

裝飾器本質上還是個函數,只不過這種函數會包含其他函數並且改變他們的行為。在討論什麼是裝飾器以及如何使用它們之前。我們需要先理解Python中的函數以及Python如何處理的。

函數

簡單來說。函數是可以接收參數並對其進行處理。例如,print以上示例中的函數將字符串輸入作為參數,並將其輸出到控制檯。還有一些函數不接受任何參數。有些函數返回輸出,有些則不返回。

內部函數

Python 使用關鍵字def 定義函數。函數還可以被允許定義在另一個函數內部——內部函數,如下所示。

<code>def print_greeting(greeting, uppercase):

def print_text(text):
print(text)

def print_text_uppercase(text):
print(text.upper())


if uppercase:
print_text_uppercase(greeting)
else:
print_text(greeting)


print_greeting("hi", True) # prints "HI"

print_greeting("hi", False) # prints "hi"/<code>

函數print_greeting() 有兩個內部函數。函數調用時候會根據uppercase參數決定使用哪個內部函數。進而輸出不同的結果。

一等公民對象

函數在Python中是一等公民。所有函數可以被當作參數(像字符串、整數等)傳遞給其他函數。下面我們看下如何傳遞函數作為參數給其他函數。

<code>  def print_hi():
print("hi")

def run_any_function(function):
function()

run_any_function(print_hi) # prints "hi"/<code>

函數 run_any_function(function) 接收任何函數作為參數並且調用它。上面被調用的函數是print_hi()。

函數也可以從其他函數返回作為輸出:

<code>def get_capable_function(uppercase):
def print_text(text):
print(text)

def print_text_uppercase(text):
print(text.upper())


if uppercase:
return print_text_uppercase
else:
return print_text

""" get_capable_function(True) returns print_text_uppercase(text) function and "hi" is passed to that """

get_capable_function(True)("hi") # prints "HI"/<code>

函數get_capable_function(uppercase) 基於參數uppercase返回一個函數。如果參數為True,那麼函數print_text_uppercase(text)就會返回,其他情況會返回函數print_text(text).

好了。有了這些背景只是後我們下一小節來討論下裝飾器是如何工作的。


分享到:


相關文章: