Python 函式如何返回一個函式?


Python 支援一等函式。事實上,所有Python 中的函式都是一等函式。Python 可以從函式中返回函式,將函式儲存在諸如列表之類的集合中,並且通常像對待任何變數或物件一樣對待它們。Python 中的函式可以返回函式,因為函式被視為一等物件。這意味著您可以將函式賦值給變數,將其作為引數傳遞給另一個函式,或在函式中將其用作返回值。在其他函式中定義函式並返回函式都是可能的。

在此程式碼中,外部函式定義並返回內部函式。然後,您可以呼叫外部函式並將它的返回值賦給一個變數。

現在,f 是對內部函式的引用。您可以像呼叫任何其他函式一樣呼叫它。

示例

def outer():
   def inner():
      print("Hello from inner!")
   return inner
f = outer()
f()

輸出

Hello from inner!

使用帶返回值的函式的引數

您可以透過不同的方式使用帶返回值的函式的引數。一種方法是將引數傳遞給外部函式,並在內部函式中使用它們。

在此程式碼中,外部函式接收引數 x 並返回一個列印其值的函式。您可以像這樣呼叫它:

示例

def outer(x):
   def inner():
      print("x is", x) 
   return inner
f = outer(10)
f()

輸出

x is 10

另一種方法是在呼叫內部函式時向其傳遞引數。

在此程式碼中,外部函式返回一個接收引數 y 並列印其值的函式。您可以像這樣呼叫它:

示例

def outer():
   def inner(y):
      print("y is", y) 
   return inner
f = outer()
f(20)

輸出

y is 20

高階函式

在 Python 中,函式可以返回另一個函式作為其結果。這被稱為“高階函式”。

示例

def adder(x):
   def inner(y):
      return x + y 
   return inner

在此示例中,我們定義了一個名為 adder 的函式,它接收單個引數 x。在 adder 內部,我們定義了另一個名為 inner 的函式,它接收單個引數 y 並返回 xy 的和。

adder 沒有直接返回總和,而是返回 inner 函式本身。這意味著,例如,當我們呼叫adder(1) 時,我們將得到一個新的函式,該函式將其引數加 1。

在 Python 中從函式返回函式

要在 Python 中從函式返回函式,您可以在第一個函式內定義一個新函式,然後返回它。此技術稱為巢狀函式或閉包。然後,返回的函式可以賦值給變數並在以後呼叫。

示例

def adder(x):
   def inner(y):
      return x + y 
   return inner

add_one = adder(1)
print(add_one(5))
# prints 6

輸出

6

在此示例中,adder 是一個接收引數 x 並返回一個新函式 inner 的函式。inner 函式接收引數 y 並返回 xy 的和。當我們呼叫adder(1) 時,它返回一個新的函式物件 inner,其中 x 設定為 1。然後,我們可以將此新函式物件賦值給變數 add_one 並使用引數 5 呼叫它,這將產生輸出 6。

總的來說,這種模式可用於編寫更靈活和可重用的程式碼,尤其是在與閉包和柯里化等其他高階程式設計概念結合使用時。

示例

def create_multiplier(factor):
   def multiplier(number):
      return number * factor
   return multiplier

double = create_multiplier(2) 
triple = create_multiplier(3)

print(double(5))	# Output: 10
print(triple(5))	# Output: 15

輸出

10
15

在此示例中,create_multiplier() 是一個接收 factor 引數並返回一個新函式 multiplier() 的函式。multiplier 函式接收一個 number 引數並返回 number 與 factor 相乘的結果。我們透過使用不同的 factor 呼叫 create_multiplier() 來建立兩個新函式 double 和 triple。然後,我們可以使用不同的數字呼叫這些函式以獲得所需的輸出。

必須注意的是,當我們呼叫 create_multiplier() 時,它每次都會返回一個新的函式物件。這意味著 double 和 triple 是不同的函式,即使它們是使用相同的 create_multiplier() 函式建立的。

在 Python 中從函式返回函式

從 Python 函式返回函式可以成為建立靈活且可重用程式碼的強大工具。透過返回函式,我們可以抽象化函式工作方式的細節,併為使用者提供更高級別的介面。在本文中,我們將探討如何使用巢狀函式或 lambda 函式從 Python 函式返回函式。

示例:巢狀函式

def adder(x):
   def inner(y):
      return x + y 
   return inner

add_one = adder(1) 
print(add_one(5))	# prints 6

輸出

6

在此示例中,adder 是一個接收引數 x 並返回一個新函式 inner 的函式。inner 函式接收引數 y 並返回 xy 的和。當我們呼叫 adder(1) 時,它返回一個新的函式物件 inner,其中 x 設定為 1。然後我們將此新函式賦值給變數 add_one。當我們呼叫 add_one(5) 時,它等效於呼叫 inner(5),其中 x 設定為 1。

總的來說,這種模式可用於編寫更靈活和可重用的程式碼,尤其是在與閉包和柯里化等其他高階程式設計概念結合使用時。

這是另一個在 Python 中返回函式的函式示例,但這次使用 lambda 函式。

示例:Lambda 函式

def make_incrementor(n):
   return lambda x: x + n

increment_by_five = make_incrementor(5)
increment_by_ten = make_incrementor(10)

print(increment_by_five(3))	# Output: 8 
print(increment_by_ten(3))	# Output: 13

輸出

8
13

在此示例中,make_incrementor() 是一個接收引數 n 並返回一個 lambda 函式的函式,該 lambda 函式接收引數 x 並返回 xn 的和。當我們呼叫 make_incrementor(5) 時,它返回一個新的 lambda 函式物件,該物件將其引數加 5。然後我們將此新函式賦值給變數 increment_by_five()。當我們呼叫 increment_by_five(3) 時,它等效於呼叫 (lambda x: x + 5)(3)

透過從函式返回函式,我們可以在 Python 中建立更靈活和可重用的程式碼。無論您使用巢狀函式還是 lambda 函式,將函式作為值返回的能力都是您程式設計工具庫中的一項強大工具。

總而言之,可以使用巢狀函式或 lambda 函式從 Python 函式返回函式,這使我們可以建立更靈活和可重用的程式碼。透過返回函式,我們可以抽象化函式工作方式的細節,併為使用者提供更高級別的介面。

更新於:2023年8月31日

17K+ 瀏覽量

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告