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函式,將函式作為值返回的能力都是您程式設計工具庫中的一個強大工具。

總而言之,在Python中從函式返回函式可以使用巢狀函式或lambda函式來完成,它允許我們建立更靈活和可重用的程式碼。透過返回一個函式,我們可以抽象出函式工作方式的細節,併為使用者提供更高級別的介面。

更新於:2023年8月31日

17K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告